자습서: Windows 앱 SDK를 사용하는 외부 위치로 패키지되거나 패키지되지 않은 앱에서 부트스트래퍼 API 사용

이 문서에서는 Windows 앱 SDK 런타임을 명시적으로 로드하고 Windows 앱 SDK API를 호출하도록 MSIX를 사용하여 설치되지 않은 앱(즉, 외부 위치로 패키지되었거나 패키지되지 않은 앱)을 구성하는 방법을 보여 줍니다. MSIX를 통해 설치되지 않은 앱에는 외부 위치로 패키지된 앱과 패키지되지 않은 앱이 포함됩니다.

Important

Windows 앱 SDK 1.0부터 외부 위치로 패키지된 앱 또는 패키지되지 않은 앱에서 Windows 앱 SDK를 로드하는 기본 방식은 <WindowsPackageType> 프로젝트 속성을 통해 자동 초기화를 사용하고 추가 구성을 변경하는 것입니다. WinUI 3 프로젝트의 컨텍스트에서 자동 초기화와 관련된 단계는 첫 번째 WinUI 3 프로젝트 만들기를 참조하세요. 또는 WinUI 3이 아닌 기존 프로젝트가 있는 경우 기존 프로젝트에서 Windows 앱 SDK 사용을 참조하세요.

고급 요구 사항(예: 사용자 지정 오류 처리 또는 특정 버전의 Windows 앱 SDK 로드)이 있는 경우 그 대신 부트스트래퍼 API를 명시적으로 호출하면 됩니다. 이것이 이 항목에서 보여 주는 접근 방식입니다. 또한, 자세한 내용은 외부 위치로 패키지되는 앱 또는 패키지되지 않은 앱에 Windows App SDK 런타임 사용을 참조하세요.

이 항목에서는 기본 콘솔 앱 프로젝트에서 부트스트래퍼 API를 명시적으로 호출하는 방법을 보여 줍니다. 그러나 단계는 Windows 앱 SDK를 사용하는 패키지되지 않은 모든 데스크톱 앱에 적용됩니다.

이 자습서를 완료하기 전에 런타임 아키텍처 를 검토 하여 앱이 Windows 앱 SDK 사용할 때 사용하는 프레임워크 패키지 종속성과 외부 위치 또는 패키지되지 않은 앱으로 패키지된 앱에서 작동하는 데 필요한 추가 구성 요소에 대해 자세히 알아보는 것이 좋습니다.

필수 조건

  1. Windows 앱 SDK용 도구 설치.
  2. 외부 위치로 패키지된 앱 및 패키지되지 않은 앱에 대한 모든 종속성이 설치되어 있는지 확인합니다(외부 위치로 패키지되거나 패키지 되지 않은 프레임워크 종속 앱에 대한 Windows 앱 SDK 배포 가이드 참조). 이 작업을 수행하는 쉬운 방법은 Windows 앱 SDK 런타임 설치 관리자를 실행하는 것입니다.

지침

C# 또는 C++ 프로젝트를 사용하여 이 자습서를 따를 수 있습니다.

참고 항목

동적 종속성 및 부트스트래퍼 API는 관리자 권한 프로세스에 의해 호출될 때 실패합니다. 따라서 Visual Studio를 관리자 권한으로 시작해서는 안 됩니다. 자세한 내용은 동적 종속성에서 권한 상승 #567을 지원하지 않음을 참조하세요.

다음 지침에 따라 외부 위치로 패키지되거나 패키지되지 않은 C# WinUI 3 프로젝트를 구성합니다.

  1. Visual Studio에서 새 C# 콘솔 앱 프로젝트를 만듭니다. 프로젝트 이름을 DynamicDependenciesTest로 지정합니다. 프로젝트를 만든 후에는 "Hello, World!" C# 콘솔 앱이 있어야 합니다.

  2. 다음으로 프로젝트를 구성합니다.

    1. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 프로젝트 파일 편집을 선택합니다.
    2. TargetFramework 요소의 값을 대상 프레임워크 모니커로 바꿉니다. 예를 들어 앱이 Windows 10 버전 2004를 대상으로 하는 경우 다음을 사용합니다.
    <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework>
    
    1. 프로젝트 파일을 저장한 후 닫습니다.
  3. 솔루션의 플랫폼을 x64로 변경합니다. .NET 프로젝트의 기본값은 AnyCPU 이지만WinUI 3은 해당 플랫폼을 지원하지 않습니다.

    1. 빌드>구성 관리자를 차례로 선택합니다.
    2. 활성 솔루션 플랫폼에서 드롭다운을 선택하고 새로 만들기를 클릭하여 새 솔루션 플랫폼 대화 상자를 엽니다.
    3. 새 플랫폼 유형 또는 선택 아래의 드롭다운에서 x64를 선택합니다.
    4. 확인을 클릭하여 새 솔루션 플랫폼 대화 상자를 닫습니다.
    5. Configuration Manager에서 닫기를 클릭합니다.
  4. 프로젝트에 Windows App SDK NuGet 패키지를 설치합니다.

    1. 솔루션 탐색기에서 Dependencies 노드를 마우스 오른쪽 단추로 클릭하고 Manage Nuget Packages를 선택합니다.
    2. NuGet 패키지 관리자 창에서 찾아보기 탭을 선택하고 Microsoft.WindowsAppSDK 패키지를 설치합니다.
  5. 이제 부트스트래퍼 API(외부 위치로 패키지되거나 패키지 되지 않은 앱에 Windows 앱 SDK 런타임 사용 참조)를 사용하여 Windows 앱 SDK 프레임워크 패키지에 대한 종속성을 동적으로 사용할 준비가 되었습니다. 이를 통해 앱에서 Windows App SDK API를 사용할 수 있습니다.

    해당 Program.cs 코드 파일을 열고 기본 코드를 다음 코드로 바꿔 부트스트랩.Initialize 메서드를 호출 하여 부트스트래퍼를 초기화 합니다. 이 코드는 부트스트래퍼를 초기화할 때 앱이 의존하는 Windows App SDK 버전을 정의합니다.

    Important

    특정 구성에 맞게 아래 코드를 편집해야 합니다. 설치한 Windows 앱 SDK 버전 중 하나를 지정할 수 있도록 Bootstrap.Initialize 메서드의 매개 변수에 대한 설명을 참조하세요.

    using System;
    using Microsoft.Windows.ApplicationModel.DynamicDependency;
    
    namespace DynamicDependenciesTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                Bootstrap.Initialize(0x00010002);
                Console.WriteLine("Hello, World!");
    
                // Release the DDLM and clean up.
                Bootstrap.Shutdown();
            }
        }
    }
    

    루트에서 부트스트래퍼 API는 앱에서 Windows 앱 SDK API를 사용할 수 있도록 하는 네이티브 C/C++ API입니다. 그러나 Windows 앱 SDK 1.0 이상을 사용하는 .NET 앱에서는 부트스트래퍼 API에 .NET 래퍼를 사용할 수 있습니다. 이 래퍼는 네이티브 C/C++ 함수를 직접 호출하는 것보다 .NET 앱에서 부트스트래퍼 API를 호출하는 더 쉬운 방법을 제공합니다. 이전 코드 예제에서는 부트스트래퍼 API에 대한 .NET 래퍼에서 Bootstrap 클래스의 정적 InitializeShutdown 메서드를 호출합니다.

  6. Windows App SDK 런타임 구성 요소가 제대로 로드되었음을 보여 주기 위해 Windows App SDK의 ResourceManager 클래스를 사용하여 문자열 리소스를 로드하는 일부 코드를 추가합니다.

    1. 프로젝트에 새 리소스 파일(.resw) 을 추가합니다(기본 이름 그대로 두기).

    2. 편집기에서 리소스 파일을 연 상태에서 다음 속성을 사용하여 새 문자열 리소스를 만듭니다.

      • 이름: 메시지
      • 값: 안녕하세요, 리소스!
    3. 리소스 파일을 저장합니다.

    4. 해당 Program.cs 코드 파일을 열고 Console.WriteLine("Hello, World!"); 행을 다음 코드로 바꿉니다.

    // Create a resource manager using the resource index generated during build.
     var manager = new Microsoft.Windows.ApplicationModel.Resources.ResourceManager("DynamicDependenciesTest.pri");
    
    // Look up a string in the .resw file using its name.
    Console.WriteLine(manager.MainResourceMap.GetValue("Resources/Message").ValueAsString);
    
    1. 디버깅 없이 시작 (또는 디버깅 시작)을 클릭하여 앱을 빌드하고 실행합니다. 문자열 Hello, resources!가 성공적으로 표시되어야 합니다.

프로젝트가 WPF인 경우

WPF(Windows Presentation Foundation) 앱의 경우 WPF 앱에서 Windows 앱 SDK 사용을 참조하세요.