Visual Studio에서 앱 패키지 매니페스트를 생성하는 방법

Visual Studio 사용하여 프로젝트를 빌드할 때 Visual Studio 유니버설 Windows 플랫폼(UWP) 앱을 배포, 표시 또는 업데이트하는 데 필요한 정보를 포함하는 패키지 매니페스트(AppxManifest.xml)를 생성합니다.

Visual Studio 사용하여 앱을 개발하는 경우 발생하는 두 가지 종류의 앱 패키지 매니페스트 파일이 있습니다.

  • Package.appxmanifest
    개발자가 게시자 정보, 로고, 프로세서 아키텍처 등과 같은 앱의 세부 정보를 구성하는 데 사용하는 XML 스타일 파일입니다. 이는 앱 개발 중에 사용되는 앱 패키지 매니페스트의 쉽게 구성할 수 있는 임시 버전입니다.
  • AppxManifest.xml
    이 파일은 Visual Studio 빌드 프로세스에서 생성되며 Package.appxmanifest 파일의 정보를 기반으로 합니다. 게시된 앱 및 테스트용으로 로드된 앱에 사용되는 앱 패키지 매니페스트의 최종 버전입니다. Package.appxmanifest 파일에 대한 업데이트가 있는 경우 프로젝트를 다시 빌드하여 AppxManifest.xml 파일의 업데이트를 확인해야 합니다.

패키징 프로세스에 대한 개요는 Visual Studio 사용하여 UWP 앱 패키징을 참조하세요.

응용 프로그램 매니페스트 유효성 검사

응용 프로그램을 게시하기 전에 Visual Studio 유효성 검사가 실패하도록 하는 오류를 모두 수정해야 합니다. Visual Studio에서는 매니페스트를 생성할 때 다음과 같이 응용 프로그램의 유효성을 검사합니다.

  • 구문 유효성 검사
    Visual Studio에서는 응용 프로그램 매니페스트의 모든 데이터가 응용 프로그램 매니페스트 스키마를 따르는지 확인합니다.
  • 의미 체계 유효성 검사
    Visual Studio에서는 정보의 컨텍스트에 따라 예상되는 데이터에 대한 지침을 제공합니다.

참고

이러한 섹션에서 찾고 있는 필드를 언급하지 않으면 별도로 구성되었을 수 있는 데이터 또는 매니페스트 스키마의 기본값에서 생성됩니다.

매니페스트 콘텐츠 생성

Visual Studio 앱 패키지에 대한 AppxManifest.xml 파일을 생성할 때 다음 표의 필드를 채웁니다.

ID

Identity 앱 매니페스트의 섹션에는 다음 필드가 포함되어 있습니다.

필드 Description
Name 다음 시나리오에서 다르게 채워지는 패키지의 이름입니다.
  • 기본적으로 이 필드의 값은 생성된 GUID입니다.
  • 앱을 Microsoft Store 연결하거나 스토어 -> 앱 패키지 만들기... 명령을 호출한 다음 개발자 계정으로 로그인하는 경우 이 필드의 값은 Microsoft Store 또는 파트너 센터의 연결된 앱에서 검색됩니다.
  • 스토어 -> 앱 패키지 만들기... 명령을 호출하지만 개발자 계정으로 로그인하지 않으면 이 필드의 값이 원본 매니페스트에서 가져옵니다.
Publisher 게시자 이름입니다. 이 이름은 다음 시나리오에 따라 서로 다르게 채워집니다.
  • 기본적으로 이 필드의 값은 사용자 이름입니다.
  • 앱을 Microsoft Store 연결하거나 스토어 -> 앱 패키지 만들기... 명령을 호출한 다음 개발자 계정으로 로그인하는 경우 이 필드의 값은 계정과 연결된 게시자입니다.
  • 스토어 -> 앱 패키지 만들기... 명령을 호출하지만 개발자 계정으로 로그인하지 않는 경우 이 필드의 값은 앱 패키지에 서명하는 데 사용한 테스트 인증서의 주체 필드와 일치합니다.
Visual Studio 게시자에 대한 CN(공용 이름) 양식만 지원하고 매니페스트의 게시자 필드에 접두사 "CN="를 추가합니다.
버전 빌드 중인 앱의 버전입니다. 일반적으로 앱이 수정되고 패키지될 때마다 증가합니다. Version 올바르게 증가되도록 하려면 스토어를 호출할 때 제공된 대화 상자를 사용합니다. -> 앱 패키지 만들기...
ProcessorArchitecture 프로젝트에 대해 지정한 빌드 구성에 따라 생성되는 값입니다. 프로젝트의 프로젝트 참조 또는 파일 참조가 앱 패키지와 다른 특정 아키텍처를 대상으로 하는 경우 빌드 오류가 throw되고 모든 참조에 대해 작동하도록 앱 패키지의 대상 아키텍처를 변경해야 합니다.

출력 XML의 Identity 예는 다음과 같습니다.

<Identity Name="Microsoft.UWPAppExample"
          Publisher="CN=Microsoft Corporation"
          Version="1.0.0.0"
          ProcessorArchitecture="x86" />

속성

앱 매니페스트의 섹션에는 Properties 다음 표의 필드가 포함되어 있습니다.

필드 Description
PublisherDisplayName 이 문자열은 다음 시나리오에서 다르게 채워집니다.
  • 기본적으로 이 필드의 값은 사용자 이름입니다.
  • 앱을 Microsoft Store 연결하거나 스토어 -> 앱 패키지 만들기... 명령을 호출한 다음 개발자 계정으로 로그인하는 경우 이 필드의 tha 값은 개발자 계정과 연결된 PublisherDisplayName 문자열과 일치합니다.
  • Store -> 앱 패키지 만들기... 명령을 호출하지만 개발자 계정으로 로그인하지 않는 경우 Package.appxmanifest 파일에서 달리 지정하지 않는 한 이 필드의 값은 사용자 이름입니다.
DisplayName 이 문자열은 다음 시나리오에 따라 서로 다르게 채워집니다.
  • 기본적으로 이 필드의 값은 프로젝트의 이름입니다.
  • 앱을 Microsoft Store 연결하거나 스토어 -> 앱 패키지 만들기... 명령을 호출한 다음 개발자 계정으로 로그인하는 경우 이 필드의 값은 다음 규칙에 따라 채워집니다.
    • 원본 매니페스트에서 이 값을 지정하고 값이 시작하는 @ 경우(이 값을 지역화할 것임을 나타낸) 이 필드의 값은 지정한 값과 일치합니다.
    • 선택된 응용 프로그램에 이름이 하나뿐인 경우 이 값은 해당 이름입니다.
    • 선택한 앱에 여러 이름이 있지만 원본 매니페스트가 지역화되지 않은 경우 값은 원본 매니페스트의 표시 이름으로 설정됩니다. 일치하지 않으면 값이 처음 예약된 이름으로 설정됩니다.
  • 스토어 -> 앱 패키지 만들기... 명령을 호출하지만 개발자 계정으로 로그인하지 않으면 이 필드의 값이 원본 매니페스트에서 가져옵니다.
로고 Visual Studio 템플릿은 기본적으로 사용됩니다Assets\StoreLogo.png. 이 값은 Package.appxmanifest 파일의 개발자가 사용자 지정해야 합니다.

출력 XML의 Properties 예는 다음과 같습니다.

<Properties>
    <DisplayName>UWP App Example</DisplayName>
    <PublisherDisplayName>Microsoft Corporation</PublisherDisplayName>
    <Logo>Assets\StoreLogo.png</Logo>
</Properties>

애플리케이션

앱 매니페스트에는 클라이언트의 타일에 표시되는 표시 이름이 각각 있는 여러 Application 요소가 포함될 수 있습니다. 앱 매니페스트의 섹션에는 Application 다음 표의 필드가 포함되어 있습니다.

필드 설명
Id 이 문자열은 다음 시나리오에 따라 서로 다르게 채워집니다.
  • 기본적으로 이 필드의 값은 프로젝트의 이름입니다.
  • 앱을 Microsoft Store 연결하거나 스토어 -> 앱 패키지 만들기... 명령을 호출한 다음 개발자 계정으로 로그인하는 경우 이 필드의 값은 원본 매니페스트의 앱과 /Applications/Application[@DisplayName] 일치하는 경우 /Properties[@DisplayName] 선택한 앱의 앱 이름입니다. 그렇지 않은 경우에는 값이 소스 매니페스트에서와 동일하게 유지됩니다.
  • 스토어 -> 앱 패키지 만들기... 명령을 호출하지만 개발자 계정으로 로그인하지 않는 경우 이 필드의 값은 원본 매니페스트와 동일합니다.
실행 파일 이 필드의 값은 프로젝트 어셈블리의 출력 이름입니다. 소스 매니페스트 파일(Package.appxmanifest)에 사용되는 실행 파일 토큰 $targetnametoken$.exe 매니페스트가 빌드될 때 실제 파일 이름으로 바뀝니다.
EntryPoint 이 값은 생성된 Executable 값과 값을 기반으로 합니다 Id .

출력 예제 Application :

<Applications>
    <Application Id="App" Executable="UWPAppExample.exe" EntryPoint="UWPAppExample.App">
        <!-- Other elements configured within the Application, such as Extensions, VisualElements, etc. -->
</Applications>

PackageDependency

이 섹션에는 이 PackageDependency 패키지에 대한 모든 Windows 구성 요소 라이브러리 종속성이 포함되어 있습니다. 예를 들어 프로젝트에 WinJS에 대한 참조가 있는 경우 Visual Studio 매니페스트가 생성될 때 종속성의 패키지 ID 정보를 검색합니다. 그런 다음 Visual Studio 이 섹션을 각 종속 패키지의 Name 필드와 MinVersion 필드로 채웁니다.

네이티브 C++ 프로젝트에서 Visual Studio Visual C/C++ 런타임에 대한 참조를 추가합니다.

<Dependencies>
    <PackageDependency Name="Microsoft.VCLibs.140.00.Debug" MinVersion="14.0.30035.0" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" />
</Dependencies>

등록 확장 Windows 런타임

앱에 대한 Windows 런타임 구성 요소를 구현할 수 있지만 올바르게 실행되려면 해당 구성 요소를 운영 체제에 등록해야 합니다. Windows 런타임 구성 요소를 등록하려면 WinMD 파일 및 앱 매니페스트에 등록 정보를 입력해야 합니다. 프로젝트가 Windows 런타임 구성 요소를 구현하는 경우 프로젝트의 빌드 출력에는 WinMD 파일이 포함됩니다. Visual Studio WinMD 파일에서 Windows 런타임 등록 정보를 추출하고 앱 매니페스트에 적절한 Extension 요소를 생성합니다.

시스템에서는 두 가지 형태의 서버인 .dll 서버(in-process) 및 .exe 서버(out-of-process)를 지원합니다. 이러한 서버에는 응용 프로그램 매니페스트에 복사되어야 하는 유사하지만 서로 다른 등록 정보가 필요합니다. Visual Studio에서는 .dll 서버에 대한 매니페스트만 생성할 수 있으며 DLLServer 확장이 .dll 서버를 등록하는 데 필요합니다. 응용 프로그램 매니페스트의 다음 값은 DLLServer 확장을 생성하기 위해 WinMD 파일에서 가져옵니다.

  • DllPath
  • ActivatableClassId
  • ThreadingModel
  • ActivatableClass(ActivatableClassId 특성)

다음은 출력 XML의 예입니다.

<extension category="Microsoft.Windows.ActivatableClass">
    <dllServer>
        <dllPath>Fabrikam.dll</dllPath>
        <activatableClass activatableClassId="Fabrikam.MyClass" threadingModel="sta" />
    </dllServer>
</extension>

이 항목에 대한 자세한 내용은 Windows 런타임 구성 요소를 참조하세요.

리소스

이 섹션에는 Resources 애플리케이션에서 지원하는 각 언어에 대한 항목이 포함되어 있습니다. 앱 매니페스트에 하나 이상의 리소스 언어가 지정되어 있어야 합니다. Visual Studio에서는 프로젝트에서 지역화 정보를 기반으로 지원되는 언어의 목록을 자동으로 생성합니다. 원본 매니페스트 파일(Package.appxmanifest)에 사용되는 리소스 언어 토큰 "x-generate"는 매니페스트가 빌드될 때 실제 언어 코드로 바뀝니다. 다음은 출력 XML의 예입니다.

<Resources>
    <Resource Language="en-us">
    <Resource Language="fr-fr">
</Resources>

목록의 첫 번째 항목은 응용 프로그램의 기본 언어입니다.

TargetDeviceFamily

섹션에는 TargetDeviceFamily 다음 필드가 포함되어 있습니다.

  • Name
  • MinVersion
  • MaxVersionTested
<Dependencies>
    <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.22000.0" />
</Dependencies>

이러한 요소는 MSBuild 속성에서 채워집니다.

참고 항목

Visual Studio를 사용하여 UWP 앱 패키징
앱 패키지 아키텍처
Windows 10 패키지 매니페스트 스키마 참조