이 항목에서는 자동 이니셜라이저 구성을 포함하여 앱 배포 방법을 사용자 지정하기 위해 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>옵트아웃할 수 있습니다.
- 프레임워크 종속 앱 및 Windows 10 버전 1903 이상을 대상으로 하는 자체 포함 앱의 경우 등록이 없는 활성화 자동 이니셜라이저가 필요하지 않습니다. 이러한 앱은 .를 통해
- 호환성 자동 이니셜라이저입니다. 이는 앱이 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, WindowsAppSDKRuntimePatchLevel2 및 WindowsAppSDKDisabledChanges. 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>
...
관련 항목
Windows developer