.NET 8에서 .NET MAUI의 초점은 품질입니다. .NET 8에서는 689개의 문제를 종결한 1618개의 끌어오기 요청이 병합되었습니다. 여기에는 .NET MAUI 팀 및 .NET MAUI 커뮤니티의 변경 내용이 포함됩니다. 이러한 변경으로 인해 .NET 8의 품질이 크게 향상되어야 합니다.
중요합니다
Xcode 또는 Android SDK Tools와 같은 기본 외부 종속성으로 인해 .NET 다중 플랫폼 앱 UI(.NET MAUI) 지원 정책은 .NET 및 .NET Core 지원 정책과 다릅니다. 자세한 내용은 .NET MAUI 지원 정책 참조하세요.
.NET 8에서 .NET MAUI는 .NET 워크로드 및 여러 NuGet 패키지로 제공됩니다. 이 방법의 장점은 프로젝트를 특정 버전에 쉽게 고정하는 동시에 미공개 또는 실험적 빌드를 쉽게 미리 볼 수 있다는 점입니다. 새 .NET MAUI 프로젝트를 만들 때 필요한 NuGet 패키지가 프로젝트에 자동으로 추가됩니다.
이 문서에서는 .NET 8용 .NET MAUI의 새로운 기능을 나열하고 각각에 대한 자세한 정보에 대한 링크를 제공합니다.
.NET 8의 새로운 기능과 관련하여 자세한 내용은 .NET 8의 새로운 기능입니다.
새로운 기능
이 .NET MAUI 릴리스의 초점은 품질이지만 앱에서 새로운 시나리오를 가능하게 하는 몇 가지 새로운 기능도 있습니다.
제어
- 소프트 입력 키보드 숨기기 및 표시를 지원하는 텍스트 입력 게인 확장 메서드를 지원하는 컨트롤입니다. 자세한 내용은 소프트 입력 키보드 숨기기 및 표시를 참조하세요.
- 클래스는 ContentPage 페이지의 아무 곳이나 탭하면 소프트 입력 키보드가 표시되는 경우 숨겨지는지 여부를 나타내는 속성을 얻 HideSoftInputOnTapped 습니다. 자세한 내용은 ContentPage를 참조하세요.
- BlazorWebView 속성 StartPath , TryDispatchAsync 메서드 및 향상된 로깅 기능을 가져옵니다. 자세한 내용은 BlazorWebView를 사용하여 .NET MAUI 앱에서 Blazor 웹앱 호스트를 참조하세요.
- WebView 속성을 가져옵니다 UserAgent . 자세한 내용은 WebView를 참조하세요.
- 그림에서 자동 실행 및 그림을 포함하여 HTML5 비디오의 인라인 미디어 재생은 기본적으로 WebView iOS에서 사용하도록 설정되었습니다. 자세한 내용은 iOS 및 Mac Catalyst에서 미디어 재생 기본 설정 설정을 참조하세요.
-
Grid.Add5개의 인수를 허용하는 오버로드가 .NET MAUI에 다시 추가되었습니다. 그러나 이 메서드는 더 이상 사용되지 않으며 Xamarin.Forms에서 마이그레이션하는 데만 사용됩니다. - Grid 는 AddWithSpan 지정된 행 및 열 범위가 있는 지정된 행 및 열에 뷰 Grid 를 추가하는 확장 메서드를 가져옵니다.
데스크톱
- 메뉴 모음 항목 및 상황에 맞는 메뉴 항목은 키보드 가속기라고 하는 바로 가기 키를 통해 호출할 수 있습니다. 자세한 내용은 키보드 가속기를 참조하세요.
- Windows 앱은 패키지되지 않은 앱으로 게시할 수 있습니다. 자세한 내용은 CLI를 사용하여 Windows용 패키지되지 않은 .NET MAUI 앱 게시를 참조하세요.
제스처 인식기
- PointerGestureRecognizer는 ,, PointerReleasedCommandPointerReleasedCommandParameter 속성 및 PointerPressedPointerReleased 이벤트를 가져옵니다PointerPressedCommand. PointerPressedCommandParameter 자세한 내용은 포인터 제스처 인식을 참조하세요.
- 클래스에서 발생한 포인터 이벤트와 함께 제공되는 개체는 PointerEventArgsPointerGestureRecognizer 형식PlatformPointerEventArgs의 속성을 얻 PlatformArgs 습니다. 이 속성은 포인터 제스처 이벤트에 대한 플랫폼별 인수에 대한 액세스를 제공합니다. 자세한 내용은 포인터 제스처 인식을 참조하세요.
-
DragStartingEventArgs끌어서 놓기 제스처 이벤트와 함께 제공되는 , DragEventArgs, DropEventArgs및 DropCompletedEventArgs 개체는 각각 속성을 얻습니다
PlatformArgs. 이 속성은 끌어서 놓기 이벤트에 대한 플랫폼별 인수에 대한 액세스를 제공합니다. 자세한 내용은 끌어서 놓기 제스처 인식(Recognize)을 참조하세요. - 또는 개체에서 메서드 DragEventArgsDragStartingEventArgsDropEventArgs 를 호출하여 끌어서 놓기 제스처가 GetPosition 발생한 위치를 가져올 수 있습니다. 자세한 내용은 끌어서 놓기 제스처 인식(Recognize)을 참조하세요.
- 이 클래스는 TapGestureRecognizer Android에서 보조 탭을 처리하는 기능을 얻습니다. 자세한 내용은 탭 제스처 인식을 참조하세요.
네비게이션
- 셸 탐색은 GoToAsync 단일 사용 탐색 데이터를 전달할 수 있는 오버로드를 얻게 되며, 탐색이 발생한 후에는 개체로 ShellNavigationQueryParameters 지워질 수 있습니다. 자세한 내용은 Pass Single Use 개체 기반 탐색 데이터를 참조하세요.
플랫폼 통합
- 앱이 Geolocation 포그라운드에 있을 때 클래스에서 위치 변경을 수신 대기할 수 있습니다. 자세한 내용은 위치 변경 내용 수신 대기를 참조하세요.
- Flashlight 는 장치에서 IsSupportedAsync 손전등을 사용할 수 있는지 여부를 결정하는 메서드를 가져옵니다. 자세한 내용은 손전등을 참조하세요.
- SensorSpeed 간격은 모든 플랫폼에서 통합되었습니다. 자세한 내용은 디바이스 센서 액세스를 참조하세요.
- 이 클래스는 Permissions Bluetooth 디바이스를 찾고, 현재 디바이스를 다른 Bluetooth 디바이스에서 검색할 수 있도록 하고, 이미 페어링된 Bluetooth 디바이스와 통신할 수 있는 Android 12 권한인 권한을 얻 Permissions.Bluetooth 습니다. 자세한 내용은 사용 권한을 참조하세요.
- 이 클래스는 Permissions 근처의 WiFi 디바이스에 액세스하기 위한 Android 13 권한인 권한을 얻 Permissions.NearbyWifiDevices 습니다. 자세한 내용은 사용 권한을 참조하세요.
XAML
-
x:ClassModifier어셈블리에서 생성된 클래스의 액세스 수준을 제어하기 위해 XAML 클래스에 특성을 지정할 수 있습니다. 자세한 내용은 클래스 한정자를 참조하세요. - 태그 확장을 사용하여 정의된 ResourceDictionary 리소스도 사용할
AppThemeBindingDynamicResource수 있습니다. 자세한 내용은 테마 리소스 정의 및 소비를 참조하세요. -
Color 는
ContentProperty클래스이므로 SolidColorBrush XAML에서 명시적으로 설정할 필요가 없습니다.
문제 해결
- 문제 해결을 위해 리소스 생성을 사용하지 않도록 설정할 수 있습니다. 자세한 내용은 이미지 패키징 사용 안 함, 시작 화면 패키징 사용 안 함, 글꼴 패키징 사용 안 함 및 자산 파일 패키징 사용 안 함을 참조하세요.
- 문제 해결을 위해 빈 시작 화면을 생성할 수 있습니다. 자세한 내용은 빈 시작 화면 생성을 참조하세요.
- Resizeter는 중복된 이미지 파일 이름을 확인합니다. 자세한 내용은 중복 이미지 파일 이름 오류를 참조하세요.
기타
- 창 관리는 클래스에서
App분리할 수 있습니다. 자세한 내용은 앱 클래스에서 창 관리 분리를 참조하세요. - Android 앱에서는 여러 시스템 글꼴을 쉽게 사용할 수 있습니다. 자세한 내용은 글꼴 사용을 참조하세요.
- iOS에서
MauiUIApplicationDelegate대리자를PerformFetch통해 재정의하거나 사용할 수 있는 메서드를iOSLifecycle.PerformFetch가져옵니다. 자세한 내용은 iOS 및 Mac Catalyst 플랫폼 수명 주기 이벤트를 참조하세요.
형식 사용 중단 및 제거
다음 형식 또는 멤버는 더 이상 사용되지 않습니다.
- ClickGestureRecognizer 더 이상 사용되지 않습니다.
-
AutomationProperties.Name,AutomationProperties.HelpText및AutomationProperties.LabeledBy연결된 속성은 더 이상 사용되지 않습니다. - 더 FocusChangeRequested 이상 사용되지 않습니다. 대신 이 메서드를 Focus() 사용하여 뷰에 포커스를 설정하려고 시도합니다.
다음 형식 또는 멤버가 제거되었습니다.
-
Application.Properties속성 및Application.SavePropertiesAsync메서드가 제거되었습니다. 앱 속성 데이터를 .NET MAUI로 마이그레이션하려면 Xamarin.Forms 앱 속성 사전에서 .NET MAUI 기본 설정으로 데이터 마이그레이션을 참조하세요. -
PhoneDialer.Current속성이 제거되었습니다.PhoneDialer.Default를 대신 사용하세요. -
OpenGLView가 제거되었습니다.
동작 변경
이전 릴리스에서 변경된 동작은 다음과 같습니다.
- 이제 XAML에서 컨트롤을 Map 사용하려면 다음
xmlns네임스페이스 선언xmlns:maps="http://schemas.microsoft.com/dotnet/2021/maui/maps"이 필요합니다. - 이미지 캐싱은
ImageSource.FromStream메서드를 사용하여 스트림에서 이미지를 로드할 때 Android에서 사용하지 않도록 설정됩니다. 이는 적절한 캐시 키를 만들 데이터가 없기 때문입니다. - iOS에서는 소프트 입력 키보드가 텍스트 입력 필드를 덮을 때 페이지가 자동으로 스크롤되므로 필드가 소프트 입력 키보드 위에 있습니다.
KeyboardAutoManagerScroll.Disconnect네임스페이스의Microsoft.Maui.Platform메서드를 호출하여 이 기본 동작을 사용하지 않도록 설정할 수 있습니다.KeyboardAutoManagerScroll.Connect메서드를 호출하여 비활성화된 후 동작을 다시 사용할 수 있도록 설정할 수 있습니다. - 일부 플랫폼에서는 셸 앱에서 탭의 색이 설정되는 방식이 변경되었습니다. 자세한 내용은 Tab 모양을 참조하세요.
- 앱의 프로젝트 파일에서 빌드 속성의
$(ApplicationIdGuid)값을 지정할 필요는 없습니다. .NET MAUI Windows 앱은 더 이상 GUID를 앱 ID로 요구하지 않고 대신 빌드 속성의$(ApplicationId)값을 앱 ID로 사용하기 때문입니다. 따라서 이제 com.mycompany.myapp과 같은 모든 플랫폼에서 동일한 역방향 도메인 형식 앱 ID가 사용됩니다. - .NET MAUI Mac Catalyst 앱은 더 이상 메뉴 모음에서 50개의 메뉴 항목으로 제한되지 않습니다.
-
PlatformImage.FromStream이제 네임스페이Microsoft.Maui.Graphics스의 메서드를 사용하여 클래스를 사용하는W2DImageLoadingService대신 Windows에서 이미지를 로드할 수 있습니다. - Android에서 애니메이션은 시스템 애니메이션 설정을 준수합니다. 추가 정보를 보려면 기본 애니메이션을 참조하세요.
-
<UseMaui>true</UseMaui>CPM(중앙 패키지 관리)을 사용하는 경우 프로젝트 속성에 필요한 NuGet 패키지가 더 이상 자동으로 포함되어 있지 않습니다.
성능
.NET MAUI 8에는 많은 성능 변경이 있습니다. 이러한 변경 내용은 다음 5개 영역으로 분류할 수 있습니다.
- 새로운 기능
- 빌드 및 내부 루프 성능
- 성능 또는 앱 크기 개선
-
구조체 및
IEquatable.NET MAUI -
에서 성능 문제 해결
{AppThemeBinding} -
주소
CA1307및CA1309성능 -
성능에 대한 주소
CA1311 -
Android에서 사용하지
ViewAttachedToWindow않는 이벤트 제거 -
다음을 위해 불필요한
System.Reflection제거{Binding} -
사용
StringComparer.Ordinal대상Dictionary및HashSet -
Android에서
MauiDrawableJava interop 줄이기 -
Android의
Label레이아웃 성능 향상 - .NET MAUI에서 컨트롤에 대한 Java interop 호출 줄이기
-
Android의
Entry.MaxLength성능 향상 -
Windows의
CollectionView메모리 사용량 향상 -
Apple 플랫폼에서 사용
UnmanagedCallersOnlyAttribute - Android에서 문자열에 대한 더 빠른 Java interop
- Android에서 C# 이벤트에 대한 더 빠른 Java interop
- JNI에 함수 포인터 사용
-
제거
Xamarin.AndroidX.Legacy.Support.V4 - iOS 및 macOS에서 제네릭 중복 제거
-
iOS와 유사한 플랫폼에서 구현 수정
System.Linq.Expressions -
iOS 및 Catalyst용으로 설정
DynamicCodeSupport=false
-
구조체 및
- 메모리 누수
- 도구 및 설명서
자세한 내용은 .NET MAUI의 .NET 8 성능 향상을 참조하세요.
.NET 7에서 .NET 8로 업그레이드
프로젝트를 .NET 7에서 .NET 8로 업그레이드하려면 Visual Studio 17.8 이상 또는 독립 실행형 설치 관리자 및 명령을 사용하여 .NET 8 및 .NET MAUI 워크로드를 dotnet workload install maui 설치합니다.
그런 다음.csproj 파일을 열고 TFM(대상 프레임워크 모니커)을 7에서 8로 변경합니다. TFM net7.0-ios13.6 을 사용하는 경우 플랫폼 버전과 일치하거나 완전히 제거해야 합니다. 다음 예제에서는 .NET 7 프로젝트의 TFM을 보여 줍니다.
<TargetFrameworks>net7.0-android;net7.0-ios;net7.0-maccatalyst;net7.0-tizen</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net7.0-windows10.0.19041.0</TargetFrameworks>
다음 예제에서는 .NET 8 프로젝트의 TFM을 보여 줍니다.
<TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst;net8.0-tizen</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net8.0-windows10.0.19041.0</TargetFrameworks>
다음 .NET MAUI NuGet 패키지에 대한 명시적 패키지 참조도 .csproj 파일에 추가해야 합니다.
<ItemGroup>
<PackageReference Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
<PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />
</ItemGroup>
CPM(중앙 패키지 관리)을 사용하는 경우 .NET MAUI 패키지는 더 이상 자동으로 참조되지 않으며 명시적으로 추가되어야 합니다. 자산(등)MauiImageMauiAsset만 포함하는 프로젝트의 경우 패키지(대신Microsoft.Maui.Controls)를 추가하는 Microsoft.Maui.Resizetizer 것으로 충분합니다.
설치한 .NET MAUI 버전에서 $(MauiVersion) 변수가 참조됩니다.
빌드 속성을 .csproj 파일에 추가하여 재정의 $(MauiVersion) 할 수 있습니다.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst</TargetFrameworks>
<UseMaui>True</UseMaui>
<MauiVersion>8.0.3</MauiVersion>
</PropertyGroup>
</Project>
이는 야간 피드 에서 임시 빌드를 사용하거나 끌어오기 요청에서 다운로드한 빌드를 사용할 때 유용할 수 있습니다.
또한 빌드 속성은 $(ApplicationIdGuid) .NET 8의 .csproj 파일에서 제거할 수 있습니다. 자세한 내용은 동작 변경 내용을 참조하세요.
업그레이드된 앱을 처음으로 빌드하기 전에 폴더 및 bin 폴더를 obj 삭제합니다.
비고
.NET 8의 .NET MAUI 앱에 대한 프로젝트 템플릿을 사용하면 빌드 속성을 사용하여 프로젝트에 대해 nullable 컨텍스트를 $(Nullable) 사용할 수 있습니다. 자세한 내용은 Nullable을 참조하세요.
참고하십시오
.NET MAUI