패키지되지 않은 배포를 사용하면 MSIX 없이 WinUI 3 앱을 제공할 수 있습니다. MSIX 배포를 사용할 수 없는 엔터프라이즈 시나리오 또는 기존 폴더 기반 설치를 선호하는 개발자에게 유용합니다.
중요합니다
시작하기 전에 이러한 제한 사항을 검토합니다. 패키지되지 않은 WinUI 3 앱에는 배포 전략에 영향을 주는 제약 조건이 있습니다.
-
단일 파일 EXE 없음 - Windows 앱 SDK 런타임 및 WinUI 3 종속성은 별도의 파일로 존재해야 합니다. .NET 단일 파일 게시 기능(
PublishSingleFile)은 하나의 실행 파일로 번들링할 수 없습니다. 항상 파일 폴더를 배포하거나 WiX 또는 Inno Setup과 같은 기존 설치 관리자에서 래핑합니다. - 런타임 종속성 - Windows 앱 SDK 런타임은 사용자의 컴퓨터에 있어야 합니다. 런타임 설치 관리자를 앱과 함께 번들로 묶거나, 실행 파일을 포함한 배포 방식을 사용해야 합니다(이 경우 출력 크기가 상당히 증가합니다). 아래 Windows 앱 SDK 런타임 배포 참조하세요.
- 패키지 ID 없음 — 패키지 매니페스트가 없으면 앱은 앱 설치 관리자 또는 스토어를 통한 자동 업데이트, 백그라운드 작업 등록, 패키지 매니페스트를 통한 파일 형식 연결 또는 시작 메뉴 타일 사용자 지정이 없는 매니페스트 기반 Windows 기능을 사용할 수 없습니다. (설치 관리자가 작성한 레지스트리 항목 및 바로 가기와 같은 기존 Win32 메커니즘은 여전히 작동합니다.)
- MSIX/package-identity Store 제출 없음 - 이 배포 모델에는 패키지 ID가 없습니다. Microsoft Store MSIX 제출에 적합하지 않습니다. ( MSI 또는 EXE 설치 관리자 제출 경로를 통해 기존 설치 관리자를 스토어에 제출할 수 있지만 이 문서에서 설명하는 것과는 별개의 워크플로입니다.)
이러한 제약 조건이 우려되는 경우 전체 MSIX 변환 없이 패키지 ID를 추가하도록 앱을 패키징 (대부분의 앱에 권장)하거나 외부 위치로 패키징하는 것이 좋습니다.
모든 패키징 옵션에 대한 자세한 내용은 앱 패키징의 장점과 단점을 참조하세요.
새 또는 기존 WinUI 앱의 압축을 풀도록 선택한 경우 다음 단계를 수행합니다.
.csproj 파일에서 첫 번째로 존재하는 PropertyGroup 요소를 찾고, 여기에 OutputType, TargetFramework, 및 기타 속성이 포함되어 있습니다.
- 이
WindowsPackageType요소에 project 속성을 추가합니다. 해당 값을None설정합니다.
<Project ...>
...
<PropertyGroup>
<WindowsPackageType>None</WindowsPackageType><!-- add this -->
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
...
</PropertyGroup>
...
</Project>
Visual Studio에서 앱을 시작하려면 (.exe)을 시작하는 경우에는 이 단계가 필요하지 않습니다.
부트스트래퍼 API
<WindowsPackageType>None</WindowsPackageType> 프로젝트 속성을 설정하면 auto-initializer 앱에 가장 적합한 Windows 앱 SDK 버전을 찾아서 로드합니다.
고급 요구 사항(예: 사용자 지정 오류 처리 또는 특정 버전의 Windows 앱 SDK 로드)이 있는 경우 부트스트래퍼 API를 명시적으로 호출할 수 있습니다. 자세한 내용은 외부 위치로 패키지되었거나 패키지되지 않은 앱에 대해 Windows 앱 SDK 런타임을 사용하는 방법에 대한 내용이 포함된 Use the Windows 앱 SDK runtime for apps packaged with external location or unpackaged과 외부 위치로 패키지되었거나 패키지되지 않은 앱에서 Windows 앱 SDK를 사용하는 부트스트래퍼 API 사용 방법에 대한 Tutorial: Use the bootstrapper API in an app packaged with external location or unpackaged that uses the Windows 앱 SDK를 참조하세요.
부트스트래퍼에 대한 자세한 내용은 프레임워크 종속 앱에 대한 배포 아키텍처 및 개요를 참조하세요.
Windows 앱 SDK 런타임 배포
패키지되지 않은 WinUI 3 앱은 사용자의 컴퓨터에 설치되는 Windows 앱 SDK 런타임에 따라 달라집니다. 런타임이 있는지 확인하는 두 가지 옵션이 있습니다.
Option 1: Windows 앱 SDK 런타임 설치 관리자(.exe) (권장)
앱과 함께 Windows 앱 SDK 런타임 설치 관리자를 포함합니다. 런타임 설치 관리자는 필요한 Windows 앱 SDK 런타임 패키지를 설치하는 재배포 가능 .exe.
Windows 앱 SDK 릴리스 페이지에서 다운로드하여, 사용자 고유의 설치 관리자 및 설치 스크립트와 함께 번들로 묶으십시오. 전체 지침은 외부 위치로 패키지되거나 패키지되지 않은 앱에 Windows 앱 SDK 런타임 사용 참조하세요.
사용자는 런타임 설치 관리자를 한 번 실행해야 합니다. 후속 앱 업데이트는 필요한 Windows 앱 SDK 버전이 변경되지 않는 한 런타임을 다시 설치할 필요가 없습니다.
옵션 2: 자체 포함 배포
프로젝트 파일에서 <WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained> 설정하여 Windows 앱 SDK 런타임을 앱의 출력 폴더에 직접 번들로 묶습니다. 이렇게 하면 런타임 종속성이 제거됩니다. 사용자가 별도로 아무것도 설치할 필요가 없습니다.
<PropertyGroup>
<WindowsPackageType>None</WindowsPackageType>
<WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>
</PropertyGroup>
장단점: 출력 폴더가 훨씬 더 크고(전체 런타임이 포함됨) 각 앱 업데이트는 전체 런타임 페이로드를 전달합니다. 간단한 배포 시나리오 또는 대상 컴퓨터에 설치된 항목을 제어할 수 없는 경우 이 옵션을 사용합니다.
→ 전체 런타임 배포 참조에 Windows 앱 SDK 사용하는 패키지되지 않은 앱을 배포합니다.
단일 파일 EXE 제한 사항
중요합니다
패키지되지 않은 WinUI 3 앱은 단일 파일 EXE로 게시할 수 없습니다. Windows 앱 SDK 런타임 및 여러 WinUI 3 종속성은 별도의 파일로 존재해야 합니다. .NET 단일 파일 게시 기능은 하나의 실행 파일로 번들로 묶을 수 없습니다.
단일 파일 배포 환경이 시나리오에 중요한 경우 다음 대안을 고려하세요.
- MSIX 패키징 사용 - 사용자가 단일 설치 관리자 환경을 사용하고(앱 설치 관리자가 모든 파일을 처리함), 스토어 자격, 패키지 ID 및 기본 제공 업데이트를 받습니다.
- 기존 설치 관리자 사용(WiX, Inno 설치) - 모든 필수 파일을 투명하게 추출하고 설치하는 단일 EXE 설치 관리자에 출력 폴더 래핑
-
다른 프레임워크 사용 - WPF
dotnet publish --self-contained -p:PublishSingleFile=truecan와 함께 WinForms 앱은 단일 파일 EXE를 생성하지만 일부 네이티브 종속성은 런타임에 추출될 수 있습니다.
패키지되지 않은 앱에 대한 배포 고려 사항
패키지되지 않은 WinUI 3 앱에는 패키지 ID가 없으므로 특정 Windows 기능에 액세스할 수 없습니다.
- 앱 설치 관리자 또는 Windows 스토어를 통한 자동 업데이트 없음
- 패키지 매니페스트를 통한 백그라운드 작업 등록 없음
- 패키지 매니페스트를 통한 파일 형식 연결 또는 프로토콜 처리기 없음
- 패키지 매니페스트를 통한 시작 메뉴 타일 사용자 지정 없음
이러한 기능이 필요한 경우 전체 MSIX 변환 없이 패키지 ID를 추가하는 중간 경로로 외부 위치로 패키징 하는 것이 좋습니다.
→ WinUI 3 및 기타 Windows 앱 프레임워크에 대한 배포 옵션의 전체 개요를 보려면 첫 번째 Windows 앱을 게시합니다.
Windows developer