최신 .NET에 대한 UWP 지원은 이제 일반 공급되며 Visual Studio 2026의 C# UWP 앱에 대한 기본값 프로젝트 유형입니다. Visual Studio 2026에는 latest .NET 사용하여 새 UWP 애플리케이션, 클래스 라이브러리 및 Windows 런타임 구성 요소를 만드는 기본 제공 프로젝트 템플릿이 포함되어 있습니다.
메모
이 문서에서는 UWP 앱에 대한 레거시 사전 컴파일 기술인 .NET Native 참조합니다. .NET Native는 보안 및 안정성 수정을 계속 받지만 새 기능 업데이트를 받지는 않습니다. 현재 .NET Native를 사용하는 경우 이 가이드는 Native AOT를 사용하여 최신 .NET 마이그레이션하는 이점을 이해하는 데 도움이 됩니다.
현대 .NET 현대화하는 이유는 무엇인가요?
네이티브 AOT를 사용하여 UWP 앱을 .NET Native에서 latest .NET로 업그레이드하면 다음과 같은 몇 가지 주요 이점이 있습니다.
최신 .NET 기능에 대한 액세스
- 최신 .NET 및 C# 기능: 모든 최신 언어 기능 및 API와 함께 최신 .NET 사용
- 활성 개발: .NET Native 보안 및 안정성 수정 사항을 계속 수신하지만 새 기능 업데이트를 받지는 않습니다. 최신 .NET 정기적인 기능 릴리스를 사용하여 적극적으로 개발되었습니다.
- 라이브러리 호환성 개선: .NET 6 이상을 지원하는 최신 버전의 NuGet 패키지를 참조하세요.
향상된 개발자 환경
더 빠른 빌드 시간 :.NET Native 에 비해 컴파일 속도가 훨씬 빨라졌습니다.- 더 나은 디버깅 지원: AOT 및 트리밍 문제에 대한 향상된 디버깅 도구 및 진단 기능
- SDK 스타일 프로젝트 파일: 자세한 레거시 스타일 구성 없이 최신의 깔끔한 .csproj 파일
- XAML 핫 다시 로드: 개발 중에 XAML 및 C# 핫 다시 로드 대한 전폭적인 지원
- 향상된 도구: IntelliSense, 라이브 미리 보기 및 XAML 진단이 원활하게 작동
성능 이점
- Native AOT 컴파일: .NET 네이티브에 비해 유사하거나 더 나은 시작 성능을 제공합니다.
- 최적화된 런타임: 절차 간 최적화를 통한 성능 향상
- 정적 유효성 검사: 빌드 시 분석기와 주석을 사용하여 AOT 호환성 문제를 식별합니다.
WinUI 3에 대한 증분 마이그레이션 경로
이제 .NET 런타임 및 UI 프레임워크를 동시에 마이그레이션하는 대신 증분 접근 방식을 사용할 수 있습니다.
- 먼저 최신 .NET 마이그레이션하고 네이티브 AOT 호환성의 유효성을 검사합니다.
- 그런 다음 UWP XAML에서 WinUI 3 및 Win32 앱 모델로 별도로 마이그레이션합니다.
이 2단계 접근 방식은 위험을 줄이고 마이그레이션을 보다 관리하기 쉽게 만듭니다.
사전 요구 사항
최신 .NET 사용하여 UWP 앱을 개발하려면 다음이 필요합니다.
- Visual Studio 2026
- 유니버설 Windows 플랫폼 도구 워크로드
- Windows SDK 10.0.26100.0 이상
설치 단계
- Visual Studio 설치 관리자 열기
Workloads Desktop & 모바일 에서Windows 애플리케이션 개발 워크로드를 선택합니다.-
선택 사항(오른쪽 창)에서 다음을 선택합니다.
- 유니버설 Windows 플랫폼 도구 - UWP 앱에 대한 모든 도구 포함
- Windows 11 SDK(10.0.26100.0) - UWP XAML 앱을 빌드하는 데 필요
최신 .NET 사용하여 새 UWP Project 만들기
Visual Studio 2026에는 최신 .NET UWP용 여러 프로젝트 템플릿이 포함되어 있습니다. 기본 C# UWP 프로젝트 템플릿은 이제 .NET 네이티브 대신 최신 .NET 대상으로 지정합니다.
- 빈 UWP 앱: 단일 프로젝트 MSIX 패키징을 사용하는 표준 UWP XAML 애플리케이션
- 빈 UWP CoreApplication 앱: 컴퍼지션/DirectX 콘텐츠가 있는 고급 시나리오(XAML 없음)
- UWP Windows 런타임 구성 요소: 최신 .NET 및 CsWinRT를 사용하여 관리되는 WinRT 구성 요소
- UWP 클래스 라이브러리: XAML을 지원하는 클래스 라이브러리
팁 (조언)
레거시 .NET 네이티브 템플릿(".NET 네이티브"로 표시)은 여전히 호환성을 위해 사용할 수 있지만 최신 .NET 템플릿은 모든 새 개발에 권장됩니다.
새 Project 만들기
- Visual Studio File>새로운>Project를 선택합니다>
- 프로젝트 형식 드롭다운에서 C# 및 UWP 로 필터링
- 빈 UWP 앱 템플릿 선택
- 프로젝트 이름을 입력하고 만들기를 선택합니다.
- 대상 및 최소 Windows 버전 선택
UWP 최신 .NET 프로젝트 이해
UWP 최신 .NET 프로젝트는 키 속성이 있는 SDK 스타일 .csproj 파일을 사용합니다.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net10.0-windows10.0.26100.0</TargetFramework> <!-- Use the latest supported .NET version -->
<TargetPlatformMinVersion>10.0.19041.0</TargetPlatformMinVersion>
<UseUwp>true</UseUwp>
<EnableMsixTooling>true</EnableMsixTooling>
<PublishAot>true</PublishAot>
<DisableRuntimeMarshalling>true</DisableRuntimeMarshalling>
</PropertyGroup>
</Project>
주요 속성 설명
- UseUwp: Windows.UI.Xaml 형식에 대한 WinRT 프로젝션을 참조하고 UWP 호환성을 위해 CsWinRT를 구성합니다.
-
UseUwpTools: XAML 컴파일러, 프로젝트 기능 및 MSIX 패키징을 비롯한 UWP 관련 도구를 사용하도록 설정합니다. 이 속성은
UseUwp이(가) 활성화되면 기본적으로 활성화됩니다. - EnableMsixTooling: 단일 프로젝트 MSIX 지원을 사용하도록 설정(별도의 패키징 프로젝트가 필요하지 않음)
- PublishAot: 네이티브 AOT 컴파일 활성화
- DisableRuntimeMarshalling: 네이티브 AOT 시나리오를 위한 성능 최적화
기존 UWP 앱을 최신 .NET 마이그레이션
기존 UWP 앱을 .NET Native에서 최신 .NET 마이그레이션하려면 다음을 수행합니다.
1단계: Project 파일 업데이트
- 기존 .csproj를 SDK 스타일 형식으로 변환
- 필요한 속성 추가 -
UseUwp,EnableMsixTooling, 또는PublishAotSelfContained - 최신 .NET 호환되는 버전으로 NuGet 패키지 참조 업데이트
2단계: 네이티브 AOT 호환성 해결
네이티브 AOT를 사용하려면 모든 코드가 AOT와 호환되어야 합니다. 일반적인 문제는 다음과 같습니다.
- 리플렉션 사용: 적절한 특성 추가 또는 원본 생성기 사용
- 동적 코드 생성: 컴파일 시간 대안으로 바꾸기
- 타사 라이브러리: 모든 종속성이 네이티브 AOT를 지원하는지 확인
AOT 호환성에 대한 자세한 정보를 보려면:
애플리케이션 코드 프로젝트:
<PropertyGroup>
<PublishAot>true</PublishAot>
</PropertyGroup>
라이브러리 프로젝트에서 다음을 설정할 수 있습니다.
<PropertyGroup>
<IsAotCompatible>true</IsAotCompatible>
</PropertyGroup>
기존 앱이 .NET Native에 runtime 지시문(rd.xml) 파일을 사용하는 경우 특성 및 분석기를 사용하여 Native AOT에서 리플렉션 및 트리밍 요구 사항을 다르게 해결해야 합니다.
팁 (조언)
[GeneratedBindableCustomProperty]를 XAML에서 필요한 {Binding} 클래스에 사용하십시오. 이러한 클래스는 .로 partial표시되어야 합니다.
3단계: 철저히 테스트
- 네이티브 AOT를 사용하도록 설정된 릴리스 모드에서 앱 빌드
- 모든 기능 테스트 - AOT 컴파일 코드가 제대로 주석을 추가한 경우 디버그 빌드와 동일하게 동작합니다.
- 게시하기 전에 트리밍 또는 AOT 경고를 해결하세요
네이티브 AOT 호환성에 대한 자세한 내용은 AOT 경고 소개 및 트리밍을 위한 .NET 라이브러리 준비를 참조하세요.
네이티브 AOT 대 .NET 네이티브
둘 다 앱을 네이티브 코드로 컴파일하지만, 네이티브 AOT는 .NET Native와 중요한 면에서 다릅니다.
정적 유효성 검사
- 네이티브 AOT: 코드 주석 및 분석기와 함께 정적 분석을 사용하여 빌드 시 AOT 호환성 유효성 검사
- .NET Native: 디버그하기 어려운 런타임 크래시로 이어질 수 있는 추론 및 대체 논리를 사용합니다.
성능 및 크기
- 시작 성능: 네이티브 AOT는 유사하거나 더 나은 시작 성능을 제공합니다(벤치마크에서 5% 개선)
- 이진 크기: 자체 포함 배포로 인해 더 작은 앱에 대해 최대 4MB 증가 예상(공유 프레임워크 패키지 없음)
- 런타임 성능: 절차 간 최적화를 통해 백 엔드 코드에 대한 성능 향상
개발자 환경
- 네이티브 AOT: 명확한 오류 메시지 및 디버깅 지원을 사용하여 개발하는 동안 문제가 표시됩니다.
- .NET 네이티브: 느린 빌드 시간, 디버그/릴리스 간의 차이 및 진단하기 어려운 런타임 문제
리플렉션 및 메타데이터
-
네이티브 AOT: 컴파일 시간 특성(예:
[DynamicallyAccessedMembers]및 원본 생성기)을 사용하여 리플렉션 처리 - .NET Native: runtime 지시문(rd.xml) 파일을 사용하여 빌드 시 메타데이터 요구 사항을 지정합니다.
.NET 네이티브 제한 사항에 대한 자세한 내용은 .NET Native 및 .NET 네이티브 및 컴파일 시작을 참조하세요.
Microsoft Store에 게시하기
최신 .NET 있는 UWP 앱을 Microsoft Store 게시하는 경우:
- 릴리스 구성에서
PublishAot또는SelfContained을 사용하도록 설정하여 빌드하세요. - AOT 또는 트리밍 경고가 없는지 반드시 확인하십시오.
- 평소와 같이 MSIX 패키지 만들기
- 파트너 센터에 업로드
메모
"지원되지 않는 Win32 API"와 관련된 Windows 앱 WACK(인증 키트) 오류를 무시할 수 있습니다. 파트너 센터는 더 이상 UWP 앱에 대해 엄격한 Win32 API 유효성 검사를 수행하지 않습니다. AppContainer 보안은 대신 런타임 권한을 처리합니다.
고급 시나리오
UWP XAML Islands (UWP XAML 아일랜드)
최신 .NET 사용하여 Win32 앱(WinForms, WPF, WinUI 3) 내에서 UWP XAML 컨트롤을 호스트할 수 있습니다. 이렇게 하면 다음을 수행할 수 있습니다.
- 완전 신뢰 패키지 앱에서 MapControl과 같은 UWP 컨트롤 호스팅
- Win32 앱과 UWP 구성 요소를 결합한 단일 프로젝트 솔루션
- 별도의 빌드 도구 체인이 없는 단일 네이티브 이진 파일
최신 NuGet 패키지 사용
최신 .NET 지원을 사용하면 .NET 6 이상이 필요한 최신 NuGet 패키지를 참조하여 .NET Native의 .NET Standard 2.0 제약 조건 제한 사항을 제거할 수 있습니다.
추가 리소스
- 네이티브 AOT 배포 소개
- 트리밍을 위한 .NET 라이브러리 준비
- "Hello, World!" UWP 앱 만들기
- Windows 앱 SDK 및 WinUI 3 - 새 Windows 앱에 권장됨
또한 참조하십시오
.NET 네이티브 설명서(레거시)
- .NET Native 앱 컴파일 - .NET 네이티브 기술 개요
- .NET Native로 시작 - .NET 네이티브를 사용하는 방법
- .NET 네이티브 및 컴파일 - .NET 네이티브 컴파일 이해
- Runtime 지시문(rd.xml) 구성 파일 참조 - .NET 네이티브 메타데이터 구성