자체 포함 앱용 Windows 앱 SDK 배포 가이드
Windows 앱 SDK 프로젝트는 기본적으로 프레임워크에 종속됩니다. 자체 포함 배포로 전환하려면 아래 단계를 따릅니다(프레임워크 종속 및 자체 포함이라는 용어 설명은 Windows SDK 배포 개요에 나와 있음).
- Visual Studio에서 앱 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 프로젝트 파일 편집을 클릭하여 편집할 앱 프로젝트 파일을 엽니다. C++ 프로젝트의 경우 우선 프로젝트 언로드를 클릭합니다.
- 앱 프로젝트 파일의 기본
PropertyGroup
내에<WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>
아래의 스크린샷과 같이 추가합니다.
- 패키지 프로젝트의 경우 앱 프로젝트 파일에서
</Project>
종료 전 파일 마지막에 아래와 같이Target
을(를) 추가합니다.
<Target Name="_RemoveFrameworkReferences" BeforeTargets="_ConvertItems;_CalculateInputsForGenerateCurrentProjectAppxManifest">
<ItemGroup>
<FrameworkSdkReference Remove="@(FrameworkSdkReference)" Condition="$([System.String]::Copy('%(FrameworkSdkReference.SDKName)').StartsWith('Microsoft.WindowsAppRuntime.'))" />
</ItemGroup>
</Target>
참고 항목
이는 Windows 앱 SDK 1.1의 버그에 대한 해결 방법이며, Windows 앱 SDK 1.2에서는 필요하지 않습니다. 패키지 프로젝트에서만 필요합니다.
- 프로젝트 파일을 저장한 후 닫습니다.
- 프로젝트 다시 로드를 클릭합니다.
- Windows 애플리케이션 패키징 프로젝트를 사용하는 경우(Blank 앱, 패키지(데스크톱의 WinUI 3)와 함께 제공되는 단일 프로젝트 MSIX가 아님) 패키징 프로젝트의 프로젝트 파일에서도 위의 모든 변경 사항을 적용합니다.
참고 항목
라이브러리 프로젝트를 변경해서는 안 됩니다. 자체 포함 배포는 앱 프로젝트(그리고 해당되는 경우 Windows 애플리케이션 패키징 프로젝트)에서만 구성해야 합니다.
Windows 앱 SDK 자체 포함 배포 샘플에서 샘플 앱을 확인하세요.
프로젝트 파일에서WindowsAppSDKSelfContained
속성을 true
(으)로 설정하면 Windows 앱 SDK 프레임워크 패키지의 콘텐츠가 빌드 출력으로 추출되어 애플리케이션의 일부로 배포됩니다.
참고 항목
앱도 자체 포함으로 게시해야 완전한 자체 포함 앱이 됩니다. 이 샘플에서 게시 프로필이 포함된 .NET 자체 포함을 구성하는 방법을 알아보세요. dotnet publish
은(는) 아직 Windows 앱 SDK 1.1에서 지원되지 않습니다.
참고 항목
C++ 앱은 완전한 자체 포함을 위해 하이브리드 CRT도 사용해야 합니다. 솔루션의 모든 프로젝트용으로 구성하려면 HybridCRT.props을 Directory.Build.props에서 (Directory.Build.props의 예시 참고) 가져오는 것이 좋습니다. 프로젝트 파일에 <UseCrtSDKReferenceStaticWarning>false</UseCrtSDKReferenceStaticWarning>
패키지 앱도 설정해야 합니다. 자체 포함 배포 샘플 앱에서 하이브리드 CRT를 사용하는 방법을 살펴보세요.
앱이 패키지로 제공되는 경우(배포 개요에서 자세한 내용 참조), Windows 앱 SDK 종속성은 MSIX 패키지 내부의 콘텐츠로 포함됩니다. 앱을 배포하려면 다른 패키지 앱과 마찬가지로 MSIX 패키지를 등록해야 합니다.
앱이 외부 위치와 함께 패키지되거나 패키지가 해제된 경우, 빌드 출력의 .exe
옆에 Windows 앱 SDK 종속성이 복사됩니다. 결과 파일을 xcopy하여 배포하거나 사용자 지정 설치 관리자에 포함할 수 있습니다.
추가 MSIX 패키지에 대한 종속성
Windows 앱 SDK에서 소수의 API는 중요한 운영 체제(OS) 기능을 나타내는 추가 MSIX 패키지에 의존합니다.
- 예를 들어 (Windows 앱 SDK 1.1부터) 푸시 알림 API(PushNotificationManager)와 앱 알림 API(AppNotificationManager)는 Singleton 패키지에 대한 종속성이 있습니다(Windows 앱 SDK의 배포 아키텍처참조).
즉, 자체 포함 앱에서 이러한 API를 사용하려면 다음과 같은 옵션이 있습니다.
- 기능을 선택 사항으로 만들고 가능한 경우에만 활성화할 수 있습니다. API의 IsSupported 메서드(PushNotificationManager.IsSupported 및 AppNotificationManager.IsSupported)를 호출하면 실행 중인 시스템에서 호출 앱이 API 사용 가능 여부를 런타임에 동적으로 확인할 수 있습니다.
- 이를 통해 자체 포함 배포의 단순성을 저해하지 않으면서도 API를 안전하게 조건부로 선택하여 사용할 수 있습니다.
- 앱 배포 외부에 OS 서비스가 설치된 경우에만 앱이 적합한 기능을 켭니다. 하지만 실제로 Singleton 패키지가 없어도 API가 작동하는 몇 가지 경우가 있으므로 IsSupported를 호출하여 확인하는 것이 좋습니다.
- 앱 설치의 일부로 필수 MSIX 패키지를 배포합니다.
- 이렇게 하면 모든 시나리오에서 API에 의존할 수 있습니다. 그러나 앱 배포의 일부로 종속성의 MSIX 패키지 배포를 요구하면 자체 포함 배포의 단순성이 저하될 수 있습니다.
- API를 사용하면 안 됩니다.
- 추가 배포 요건 없이 유사한 기능을 갖춘 대체 API를 고려해 보세요.
자동 UndockedRegFreeWinRT 지원 옵트아웃(또는 옵트인)
Windows 앱 SDK 버전 1.2(안정화 채널에서)에 프로젝트 속성 WindowsAppSdkUndockedRegFreeWinRTInitialize이 도입되었습니다. 이 속성을 true로 설정하면 앱 시작 시 Windows 앱 SDK의 도킹 해제 등록이 필요 없는 Windows 런타임(UndockedRegFreeWinRT) 구현이 자동으로 활성화됩니다. 패키지 해제된 자체 포함 앱에 이러한 지원이 필요합니다.
WindowsAppSDKSelfContained가 true이고 WindowsPackageType이 None이며 (Windows 앱 SDK 버전 1.2부터) OutputType 프로젝트 속성이 Exe 또는 WinExe로 설정된 경우(즉, 프로젝트가 실행 파일을 생성하는 경우) 기본적으로WindowsAppSdkUndockedRegFreeWinRTInitialize가 true로 설정되어 있습니다. 마지막 조건은 기본적으로 클래스 라이브러리 DLL 및 기타 비실행 파일에 자동 UndockedRegFreeWinRT 지원을 추가하지 않도록 하는 것입니다. 비실행 파일(예: UndockedRegFreeWinRT를 초기화하지 않는 호스트 프로세스 실행 파일에서 로드되는 테스트 DLL)에 자동 UndockedRegFreeWinRT 지원이 필요한 경우 프로젝트에서 <WindowsAppSdkUndockedRegFreeWinRTInitialize>true</WindowsAppSdkUndockedRegFreeWinRTInitialize>
을(를) 사용하여 명시적으로 활성화할 수 있습니다.
관련 항목
Windows developer