다음을 통해 공유


.NET 8용 .NET MAUI의 새로운 기능

.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 릴리스의 초점은 품질이지만 앱에서 새로운 시나리오를 가능하게 하는 몇 가지 새로운 기능도 있습니다.

제어

데스크톱

제스처 인식기

플랫폼 통합

XAML

문제 해결

기타

형식 사용 중단 및 제거

다음 형식 또는 멤버는 더 이상 사용되지 않습니다.

다음 형식 또는 멤버가 제거되었습니다.

동작 변경

이전 릴리스에서 변경된 동작은 다음과 같습니다.

  • 이제 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개 영역으로 분류할 수 있습니다.

자세한 내용은 .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을 참조하세요.

참고하십시오