다음을 통해 공유


프로젝트 속성 및 자동 이니셜라이저

이 항목에서는 자동 이니셜라이저 구성을 포함하여 앱 배포 방법을 사용자 지정하기 위해 Visual Studio 프로젝트 파일(예: .csproj 또는 .vcxproj)에서 설정할 수 있는 프로젝트 속성에 대해 설명합니다.

Windows 앱 SDK의 자동 이니셜라이저

Windows 앱 SDK에는 Windows 앱 런타임이 제대로 초기화되었는지 확인하는 몇 가지 루틴이 있습니다. 이러한 루틴은 애플리케이션의 진입점 이전에 자동으로 실행되고 초기화 작업을 수행하므로 자동 이니셜라이저라고 합니다.

팁 (조언)

기술 세부 정보가 궁금할 경우 C++에서 자동 이니셜라이저는 정적 클래스 생성자를 사용하여 구현됩니다. C#에서는 .NET 모듈 이니셜라이저를 사용하여 자동 이니셜라이저를 구현합니다. 따라서 적절한 용어가 자동 이니셜라이저 일 때 사용되는 모듈 이니셜라이저가 들릴 수 있습니다.

모든 자동 이니셜라이저는 기본적으로 앱의 패키징 및 배포 구성에 따라 조건부로 사용하도록 설정됩니다. 자세한 내용은 다음과 같습니다.

  • 부트스트래퍼(동적 종속성이라고도 함) 자동 이니셜라이저입니다. 이 자동 이니셜라이저는 앱 시작 시 부트스트래퍼 API를 자동으로 호출합니다. Windows 앱 런타임이 앱의 패키지 그래프에 추가되도록 하려면 프레임워크 종속 패키지되지 않은 앱에 필요합니다. 프레임워크 종속(및 자체 포함) 앱에 대한 자세한 내용은 Windows 앱 SDK 배포 개요를 참조하세요. 패키지되지 않은(및 패키지된) 앱에 대한 자세한 내용은 Windows 앱( 패키징, 배포 및 프로세스)을 참조하세요.
    • 패키지된 앱의 경우 파일이 프레임워크 종속성을 표현하기 때문에 appxmanifest.xml 부트스트래퍼/동적 종속성 자동 이니셜라이저가 필요하지 않습니다. 또한 자체 포함 앱의 경우 해당 앱이 프레임워크를 사용하지 않으므로 부트스트래퍼/동적 종속성 자동 이니셜라이저가 필요하지 않습니다.
    • 또는 파일을 통해 .csproj부트스트래퍼/동적 종속성 자동 이니셜라이저를 옵트아웃할 수 있습니다..vcxproj<WindowsAppSdkBootstrapInitialize>false</WindowsAppSdkBootstrapInitialize>
  • Deployment Manager 자동 이니셜라이저. 파일이 해당 종속성을 표현할 수 없으므로 기본/싱글톤 기능(예: 푸시 알림) appxmanifest.xml 을 사용하는 프레임워크 종속 패키지 앱에 필요합니다.
    • 자체 포함 앱의 경우 해당 앱이 기본/싱글톤 기능을 지원하지 않으므로 Deployment Manager 자동 이니셜라이저가 필요하지 않습니다.
    • 자세한 내용은 이 항목의 뒷부분에 있는 Deployment Manager 자동 이니셜라이저 섹션을 참조하세요.
  • 등록이 없는 활성화 자동 이니셜라이저입니다. 이는 앱이 Windows 10 2019년 5월 업데이트(버전 1903; 코드 이름 "19H1")보다 이전의 운영 체제 버전에서 하위 버전을 실행하는 경우 자체 포함 앱이 매니페스트 기반의 WinRT(실행 취소된 등록 없는 Windows 런타임) 활성화(UndockedRegFreeWinRT)를 사용하는 데 필요합니다.
    • 프레임워크 종속 앱 및 Windows 10 버전 1903 이상을 대상으로 하는 자체 포함 앱의 경우 등록이 없는 활성화 자동 이니셜라이저가 필요하지 않습니다. 이러한 앱은 .를 통해 <WindowsAppSdkUndockedRegFreeWinRTInitialize>false</WindowsAppSdkUndockedRegFreeWinRTInitialize>옵트아웃할 수 있습니다.
  • 호환성 자동 이니셜라이저입니다. 이는 앱이 A/B 포함 기능을 사용하여 서비스 릴리스 동작을 제어하는 데 필요합니다. 자세한 내용은 RuntimeCompatibilityOptions를 참조하세요.
    • A/B 포함(기본값)을 사용하지 않는 앱의 경우 호환성 자동 이니셜라이저가 필요하지 않습니다.

배포 관리자 자동 초기화 도구

Windows App SDK 1.8 또는 그 이후 버전을 사용하는 앱이 시작될 때, 기본적으로 Deployment Manager 자동 초기화 프로그램이 실행됩니다. 그러나 당신은 그 일이 일어나지 않도록 선택할 수 있습니다. 이 섹션에서는 Deployment Manager 자동 이니셜라이저를 실행할 수 있는 이점과 주의 사항에 대해 설명하고 옵트아웃 여부를 결정하는 데 도움이 됩니다.

앱이 Main/Singleton 패키지(예: 푸시 알림)의 기능을 사용하려면: 1. 배포 API를 사용하여 해당 패키지가 배포되도록 해야 합니다(Main/Singleton 패키지는 프레임워크가 아니라 앱과 같은 "기본" 패키지이므로 앱의 appx 매니페스트에서 종속성으로 등록할 수 없으므로). 대신 배포 API는 해당 패키지를 배포하는 기능을 제공합니다.) 2. 1로 인해 앱이 DeploymentManager.Initialize 를 호출하도록 하여 배포 관리자를 초기화해야 합니다. 앱에서 볼 수 있듯이 자동으로 또는 명시적으로 이 작업을 수행할 수 있습니다. 3. 앱은 기본/싱글톤 패키지에 종속되도록 프레임워크 종속 패키지 앱이어야 합니다.

배포 관리자를 초기화하는 한 가지 방법은 Deployment Manager 자동 이니셜라이저를 실행할 수 있도록 하는 것입니다(이 항목의 앞부분에 있는 Windows 앱 SDK의 자동 이니셜라이저 섹션 참조). Deployment Manager 자동 이니셜라이저는 DeploymentManager.Initialize 를 자동으로 호출합니다. 배포 관리자를 초기화하는 다른 방법은 DeploymentManager.Initialize 를 명시적으로 호출하는 것입니다.

앱(Windows 앱 SDK 1.8 이상 사용)에 Main/Singleton 패키지가 필요하지 않은 경우 앱의 프로젝트 파일에서 WindowsAppSdkDeploymentManagerInitialize 속성을 false 로 설정하여 Deployment Manager 자동 이니셜라이저를 옵트아웃해야 합니다.

앱(Windows 앱 SDK 1.8 이상 사용)에 Main/Singleton 패키지가 필요한 경우 다음 중 하나를 수행할 수 있습니다.

  • Deployment Manager 자동 이니셜라이저가 실행되도록 허용합니다(기본적으로 실행됨).
  • 또는 앱의 프로젝트 파일에서 WindowsAppSdkDeploymentManagerInitialize 속성을 false 로 설정하여 Deployment Manager 자동 이니셜라이저를 옵트아웃합니다. 그런 다음, DeploymentManager.Initialize 를 명시적으로 호출해야 합니다.

중요합니다

AppContainer에서 실행 중인 모든 프로세스의 경우 DeploymentManager.Initialize가 호출되도록 하면 앱이 packageManagement에서 제한된 기능을 선언 해야 합니다.

프로젝트 속성

아래 표에는 앱의 프로젝트 파일에서 설정할 수 있는 속성이 있습니다. Windows 앱 SDK의 자동 이니셜라이저에 대한 자세한 내용은 이전 섹션(위)을 참조하세요.

속성 이름 및 설명 가치들 자세한 정보
AppxPackage. WinUI 3 앱을 패키지할지 여부를 지정합니다. false (패키지되지 않은 앱의 경우) 또는 없음(패키지된 앱의 경우) WinUI 앱 패키지 풀기
EnableMsixTooling. 프로젝트에 단일 프로젝트 MSIX 기능을 사용하도록 설정합니다. true (사용하려면) 또는 부재 중(사용하지 않도록 설정) 단일 프로젝트 MSIX를 사용하여 앱 패키지
UseWinUI. 앱에서 WinUI 3 사용자 인터페이스 프레임워크를 사용하는지 여부를 지정합니다. true 또는 없음( false의 경우) Windows 앱 SDK의 WinUI(WinUI 3)
WindowsAppSdkBootstrapInitialize. Windows 앱 SDK가 부트스트래퍼/동적 종속성 자동 이니셜라이저를 활용하는지 여부를 결정합니다. true (실행 파일의 기본값), false (실행 파일이 아닌 경우 기본값) 자동 이니셜라이저 옵트아웃(또는 자동 이니셜라이저 포함)
WindowsAppSdkDeploymentManagerInitialize. Windows 앱 SDK가 Deployment Manager 자동 이니셜라이저를 활용하는지 여부를 결정합니다. true (기본값), false
WindowsAppSDKRuntimePatchLevel1, WindowsAppSDKRuntimePatchLevel2WindowsAppSDKDisabledChanges. Windows 앱 SDK가 호환성 자동 이니셜라이저를 활용하는지 여부를 결정하고 서비스 업데이트에 추가된 변경 내용의 Windows 앱 런타임 동작에 대해 원하는 호환성 옵션을 구성합니다. 다양하거나 없음(자동 이니셜라이저를 사용하지 않도록 설정) RuntimeCompatibilityOptions
WindowsAppSdkSelfContained. 앱이 자체 포함 배포되는지 여부를 결정합니다. true 또는 없음( false의 경우) 자체 포함 앱에 대한 Windows 앱 SDK 배포 가이드
WindowsAppSdkUndockedRegFreeWinRTInitialize. Windows 앱 SDK가 등록 없는 활성화 자동 이니셜라이저를 활용하는지 여부를 결정합니다. true (실행 파일의 기본값), false (실행 파일이 아닌 경우 기본값) 자동 UndockedRegFreeWinRT 지원 옵트아웃(또는 옵트아웃)
WindowsPackageType. 패키지되지 않은 앱에 대한 설정 <WindowsPackageType>None</WindowsPackageType> 으로 인해 부트스트래퍼/동적 종속성 자동 이니셜라이저가 앱에 가장 적합한 Windows 앱 SDK 버전의 버전을 찾아서 로드합니다. 없음 또는 없음(자동 이니셜라이저를 사용하지 않도록 설정) WinUI 앱 패키지 풀기

백그라운드에서 자동 이니셜라이저 옵트아웃

Example

다음은 C# WinUI 3 프로젝트의 일반적인 .csproj 파일에서 발췌한 내용으로, 위 표에서 사용 중인 프로젝트 속성 중 일부를 보여 드립니다.

...
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
    <TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
    ...
    <UseWinUI>true</UseWinUI>
    <EnableMsixTooling>true</EnableMsixTooling>
  </PropertyGroup>
...