다음을 통해 공유


자체 포함 앱용 Windows 앱 SDK 배포 가이드

Windows 앱 SDK 프로젝트는 기본적으로 프레임워크에 종속됩니다. 자체 포함 배포로 전환하려면 아래 단계를 따릅니다(프레임워크 종속자체 포함이라는 용어 설명은 Windows SDK 배포 개요에 나와 있음).

  • Visual Studio에서 앱 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 프로젝트 파일 편집을 클릭하여 편집할 앱 프로젝트 파일을 엽니다. C++ 프로젝트의 경우 우선 프로젝트 언로드를 클릭합니다.
  • 앱 프로젝트 파일의 기본 PropertyGroup 내에 <WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained> 아래의 스크린샷과 같이 추가합니다.

프로젝트 파일에 설정된 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.propsDirectory.Build.props에서 (Directory.Build.props의 예시 참고) 가져오는 것이 좋습니다. 프로젝트 파일에 <UseCrtSDKReferenceStaticWarning>false</UseCrtSDKReferenceStaticWarning> 패키지 앱도 설정해야 합니다. 자체 포함 배포 샘플 앱에서 하이브리드 CRT를 사용하는 방법을 살펴보세요.

앱이 패키지로 제공되는 경우(배포 개요에서 자세한 내용 참조), Windows 앱 SDK 종속성은 MSIX 패키지 내부의 콘텐츠로 포함됩니다. 앱을 배포하려면 다른 패키지 앱과 마찬가지로 MSIX 패키지를 등록해야 합니다.

앱이 외부 위치와 함께 패키지되거나 패키지가 해제된 경우, 빌드 출력의 .exe 옆에 Windows 앱 SDK 종속성이 복사됩니다. 결과 파일을 xcopy하여 배포하거나 사용자 지정 설치 관리자에 포함할 수 있습니다.

추가 MSIX 패키지에 대한 종속성

Windows 앱 SDK에서 소수의 API는 중요한 운영 체제(OS) 기능을 나타내는 추가 MSIX 패키지에 의존합니다.

즉, 자체 포함 앱에서 이러한 API를 사용하려면 다음과 같은 옵션이 있습니다.

  1. 기능을 선택 사항으로 만들고 가능한 경우에만 활성화할 수 있습니다. API의 IsSupported 메서드(PushNotificationManager.IsSupportedAppNotificationManager.IsSupported)를 호출하면 실행 중인 시스템에서 호출 앱이 API 사용 가능 여부를 런타임에 동적으로 확인할 수 있습니다.
    • 이를 통해 자체 포함 배포의 단순성을 저해하지 않으면서도 API를 안전하게 조건부로 선택하여 사용할 수 있습니다.
    • 앱 배포 외부에 OS 서비스가 설치된 경우에만 앱이 적합한 기능을 켭니다. 하지만 실제로 Singleton 패키지가 없어도 API가 작동하는 몇 가지 경우가 있으므로 IsSupported를 호출하여 확인하는 것이 좋습니다.
  2. 앱 설치의 일부로 필수 MSIX 패키지를 배포합니다.
    • 이렇게 하면 모든 시나리오에서 API에 의존할 수 있습니다. 그러나 앱 배포의 일부로 종속성의 MSIX 패키지 배포를 요구하면 자체 포함 배포의 단순성이 저하될 수 있습니다.
  3. API를 사용하면 안 됩니다.
    • 추가 배포 요건 없이 유사한 기능을 갖춘 대체 API를 고려해 보세요.

자동 UndockedRegFreeWinRT 지원 옵트아웃(또는 옵트인)

Windows 앱 SDK 버전 1.2(안정화 채널에서)에 프로젝트 속성 WindowsAppSdkUndockedRegFreeWinRTInitialize이 도입되었습니다. 이 속성을 true로 설정하면 앱 시작 시 Windows 앱 SDK의 도킹 해제 등록이 필요 없는 Windows 런타임(UndockedRegFreeWinRT) 구현이 자동으로 활성화됩니다. 패키지 해제된 자체 포함 앱에 이러한 지원이 필요합니다.

WindowsAppSDKSelfContainedtrue이고 WindowsPackageTypeNone이며 (Windows 앱 SDK 버전 1.2부터) OutputType 프로젝트 속성이 Exe 또는 WinExe로 설정된 경우(즉, 프로젝트가 실행 파일을 생성하는 경우) 기본적으로WindowsAppSdkUndockedRegFreeWinRTInitializetrue로 설정되어 있습니다. 마지막 조건은 기본적으로 클래스 라이브러리 DLL 및 기타 비실행 파일에 자동 UndockedRegFreeWinRT 지원을 추가하지 않도록 하는 것입니다. 비실행 파일(예: UndockedRegFreeWinRT를 초기화하지 않는 호스트 프로세스 실행 파일에서 로드되는 테스트 DLL)에 자동 UndockedRegFreeWinRT 지원이 필요한 경우 프로젝트에서 <WindowsAppSdkUndockedRegFreeWinRTInitialize>true</WindowsAppSdkUndockedRegFreeWinRTInitialize>을(를) 사용하여 명시적으로 활성화할 수 있습니다.