프레임워크 패키지 종속 요소
앱이 Microsoft Store에 있는 일부 재배포 가능 소프트웨어를 프레임워크 패키지로 사용할 경우, 재배포 가능 구성 요소를 연계 설치하는 대신 프레임워크 패키지의 종속 요소로 선언할 수 있습니다. 그러나 Microsoft Store에 연결된 재배포 가능 요소를 위한 프레임워크 패키지가 없을 경우, 사용자 지정 설치 작업을 고려해 보세요. 대신 사용자 지정 설치 작업을 고려해 보세요.
세부 정보
필요한 재배포 가능 요소를 위한 내보내기 라이브러리를 참조하여 정상적인 방식으로 앱을 개발합니다.
앱과 재배포 가능 요소를 번들로 묶는 대신, 매니페스트를 업데이트하여 관련 프레임워크 패키지에 대한 종속성을 선언합니다.
사용자가 Microsoft Store에서 앱을 설치하면 Microsoft Store가 의존성을 감지하고 프레임워크 패키지를 앱에서 사용할 수 있도록 보장합니다.
프레임워크 패키지가 이미 장치에 설치되어 있으면 추가 조치가 필요하지 않습니다. 그렇지 않으면 이를 사용하는 앱 설치를 진행하기 전에 Microsoft Store가 프레임워크 패키지 설치를 시작합니다.
앱의 x86 빌드는 프레임워크 패키지의 x86 빌드를 사용합니다. 앱의 x64 빌드는 프레임워크 패키지의 x64 빌드를 사용합니다. 아키텍처를 지정하기 위해 아무 것도 할 필요가 없습니다. 플랫폼이 대신 처리합니다.
DirectX 런타임
이 프레임워크 패키지는 레거시 DirectX SDK에서 다양한 선택적 구성 요소를 나란히 제공합니다. 애플리케이션에서 더 이상 사용되지 않는 Direct3D 유틸리티 라이브러리 D3DX9, D3DX10 또는 D3DX11, XAudio 2.7, XInput 1.3 또는 XACT를 사용하는 경우 이 패키지를 사용하여 패키징된 Win32 데스크톱 애플리케이션에 대해 더 이상 사용하지 않는 DLL을 배포할 수 있습니다. 이러한 구성 요소에 대한 자세한 배경 지식을 보려면 이 블로그 게시물을 참조하세요.
참고 항목
DirectX를 사용하는 대부분의 타이틀에는 실제로 이 '레거시 DirectX SDK' 프레임워크 패키지 종속성이 필요하지 않습니다.
D3DCompiler_33.dl - D3DCompiler_43.dll
d3dcsx_42.dll, d3dcsx_43.dll
d3dx10.dll, d3dx10_33.dll - d3dx10_43.dll
d3dx11_42.dll, d3dx11_43.dll
d3dx9_24.dll - D3DX9_43.dll
x3daudio1_0.dll - X3DAudio1_7.dll
xactengine2_0.dll - xactengine2_9.dll
xactengine3_0.dll - xactengine3_7.dll
XAPOFX1_0.dll - XAPOFX1_5.dll
XAudio2_0.dll - XAudio2_7.dll
xinput1_1.dll - xinput1_3.dll
또는 레거시 DirectX SDK 종속성을 제거하도록 응용 프로그램을 업데이트할 수 있습니다.
XAudio2의 경우 가장 좋은 옵션은 Windows 10 SDK에서 헤더를 사용하여 XAudio 2.9로 업그레이드하는 것입니다. Windows 10의 경우 XAudio 2.9, X3DAudio 및 XAPOFX가 모두 운영 체제에 기본으로 제공됩니다. 비 Store 버전의 경우 Windows 7 SP1 이상에서 XAudio2.9를 지원하는 간단한 애플리케이션 로컬 재배포 가능 패키지가 있는 XAudio2Redist를 사용할 수 있습니다. 이는 배포를 단순화하고 또한 레거시 XAudio 2.7을 사용하여 다양한 알려진 버그를 해결합니다. Microsoft Docs를 참조하세요.
XInput의 경우 가장 좋은 옵션은 Windows 10 SDK에서 헤더를 사용하여 XInput 1.4를 사용하는 것입니다. Windows 10의 경우 XInput 1.4는 운영 체제에 포함되어 있습니다. 비 Store 버전의 경우 운영 체제에 포함된 XInput 9.1.0을 Windows Vista까지 이전 버전에서 사용할 수 있습니다. 이 블로그 게시물을 참조하세요.
레거시 XInput 1.3은 알려진 보안 문제가 있으므로 사용하지 않는 것이 좋습니다. 이 문제를 완화하고 SHA-256 코드 서명으로 업데이트하기 위해 프레임워크 패키지의 버전이 업데이트되었지만 원래 레거시 DirectX 최종 사용자 런타임 패키지는 변경되지 않습니다.
Direct3D 10 (
d3dx10
)의 경우 가장 좋은 옵션은 Direct3D 11로 업그레이드하는 것입니다. Microsoft Docs를 참조하세요.Direct3D 11 (
d3dx11
)의 경우, Direct3D 11의 레거시 D3DX에 대한 다양한 대체 항목은 이 블로그 게시물을 참조하세요.
이전 타이틀의 경우 2010년 6월 버전의 D3DX9, D3DX10 및 D3DX11에 병렬 라이선스를 제공하는 Microsoft.DXSDK.D3DX NuGet 패키지를 사용할 수도 있습니다. 이러한 재배포 가능 DLL은 SHA-256 코드 서명도 합니다.
- HLSL 컴파일러 (
D3DCompiler
)의 경우 Windows 10 SDK에서 최신 버전을 사용할 수 있습니다. Windows 10의 경우 이는 운영 체제에 포함되어 있습니다. 비 Store 버전의 경우에는 간단한 애플리케이션 로컬 파일로D3DCompiler_47.dll
을(를) 게임과 나란히 포함할 수 있습니다. 이 블로그 게시물을 참조하세요.
참고 항목
이 프레임워크 패키지나 레거시 DirectX End-User 재배포 가능 패키지는 어떤 방식으로든 DirectX 런타임을 수정하지 않습니다.
예제 MicrosoftGame.config
코드 조각:
<Game>
<DesktopRegistration>
<DependencyList>
<KnownDependency Name="DX11"/>
</DependencyList>
</DesktopRegistration>
</Game>
개발 또는 테스트 컴퓨터로 DirectX 프레임워크 패키지를 가져오는 두 가지 방법이 있습니다.
- Microsoft 다운로드 사이트에서 다운로드하고 Appx 파일을 두 번 클릭하여 설치합니다(권장). DirectX x86 프레임워크 패키지, DirectX x64 프레임워크 패키지
- DirectX 프레임워크 종속 패키지를 설치할 DirectX 샘플 앱을 받으려면 앱 실행 메뉴에서 다음 링크를 입력합니다. (참고: RETAIL 개발 샌드박스의 컴퓨터에서만 작동하며, x64 플랫폼 컴퓨터를 사용하는 경우 x64 플랫폼 버전만을 설치합니다.) ms-windows-store://pdp/?productid=9MTF6XHMN17Z
참고 항목
DirectX Framework 패키지는 이러한 DLL을 System32 폴더에 설치하지 않습니다. DirectX Framework 패키지는 런타임에 해당 패키지 응용 프로그램에 대한 검색 경로에 있습니다. 명시적 링크를 사용하는 경우 LoadLibraryEx
플래그 LOAD_LIBRARY_SEARCH_SYSTEM32
또는 LOAD_LIBRARY_SEARCH_APPLICATION_DIR
을(를) 사용하여 이러한 레거시 DirectX 라이브러리를 로드하지 않도록 합니다.
이 프레임워크 패키지의 9.29.1974.0 버전에는 SHA-256 코드 서명 페이로드 DLL뿐만 아니라 XInput 1.3에 대한 보안 수정 사항도 포함되어 있습니다.
Visual Studio C++ 런타임
C/C++ 런타임의 특정 경우 기존의 재배포 형식과 프레임워크 패키지 형식이 항상 동일하지는 않습니다. Microsoft Store를 사용하지 않는 앱에서 기존의 방식은 항상 기존의 재배포 형식을 사용했습니다.
Visual C/C++ 버전 | 권장 사항 | APPX 프레임워크 패키지에 대한 다운로드 링크 |
---|---|---|
2015, 2017, 2019, 2022 | 기존 재배포 가능 패키지와 프레임워크 패키지 형식은 동일하며 사용자는 두 가지 중 하나를 선택할 수 있습니다. 하지만 프레임워크 패키지를 사용하는 것이 모범 사례입니다. | 데스크톱 브리지를 위한 VC 14.0 프레임워크 패키지 |
2013 | MSIXVC로 패키징된 앱은 프레임워크 버전을 사용해야 합니다. 그렇지 않으면 일부 API가 예기치 않게 작동할 수 있습니다. | 데스크톱 브리지를 위한 VC 12.0 프레임워크 패키지 |
2012 | MSIXVC로 패키징된 앱은 프레임워크 버전을 사용해야 합니다. 그렇지 않으면 일부 API가 예기치 않게 작동할 수 있습니다. | 데스크톱 브리지를 위한 VC 11.0 프레임워크 패키지 |
2010 이하 | MSIXVC로 패키징된 앱은 기존의 재배포 가능 요소의 느슨한 파일을 앱 폴더의 적절한 하위 폴더로 통합해야 합니다. 이러한 버전의 경우 기존의 재배포 가능 요소와 프레임워크 패키지 모두 사용하지 않아야 합니다. | 적용할 수 없음 |
앞서 언급한 설치 프로그램은 필요한 프레임워크 패키지를 다음 Extension SDKs 폴더에 배치합니다.
%PROGRAMFILES(X86)%\Microsoft SDKs\Windows Kits\10\ExtensionSDKs
앱의 아키텍처에 해당하는 버전인 x86 또는 x64를 사이드로드해야 합니다.
패키지 및 해당 프레임워크 종속성을 로컬로 테스트하려면 애플리케이션이 구축된 Visual Studio 버전을 파악한 다음 APPX 프레임워크 패키지를 사이드로드하고 앱을 등록합니다.
추가 정보는 Microsoft Docs를 참조하세요.
Visual Studio 2012
다음은 Visual Studio 2012 VCLibs 프레임워크 패키지 v11에 대한 매니페스트 항목의 예입니다.
<DesktopRegistration>
<DependencyList>
<KnownDependency Name="VC11"/>
</DependencyList>
</DesktopRegistration>
이 프레임워크 패키지를 사이드로드하려면
x86:
프레임워크 패키지를 찾습니다.
C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.110\14.0\Appx\Retail\x86\Microsoft.VCLibs.x86.11.00.Desktop.appx
두 번 클릭하여 설치하거나 다음 Windows PowerShell 명령을 실행합니다.
add-appxpackage "C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.110\14.0\Appx\Retail\x86\Microsoft.VCLibs.x86.11.00.Desktop.appx"
x64:
프레임워크 패키지를 찾습니다.
C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.110\14.0\Appx\Retail\x64\Microsoft.VCLibs.x64.11.00.Desktop.appx
두 번 클릭하여 설치하거나 다음 Windows PowerShell 명령을 실행합니다.
add-appxpackage "C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.110\14.0\Appx\Retail\x64\Microsoft.VCLibs.x64.11.00.Desktop.appx"
Visual Studio 2013
다음은 Visual Studio 2012 VCLibs 프레임워크 패키지 v12에 대한 매니페스트 항목의 예입니다.
<DesktopRegistration>
<DependencyList>
<KnownDependency Name="VC12"/>
</DependencyList>
</DesktopRegistration>
이 프레임워크 패키지를 사이드로드하려면
x86:
프레임워크 패키지를 찾습니다.
C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.120\14.0\Appx\Retail\x86\Microsoft.VCLibs.x86.12.00.Desktop.appx
두 번 클릭하여 설치하거나 다음 Windows PowerShell 명령을 실행합니다.
add-appxpackage "C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.110\14.0\Appx\Retail\x86\Microsoft.VCLibs.x86.11.00.Desktop.appx"
x64:
프레임워크 패키지를 찾습니다.
C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.120\14.0\Appx\Retail\x64\Microsoft.VCLibs.x64.12.00.Desktop.appx
두 번 클릭하여 설치하거나 다음 Windows PowerShell 명령을 실행합니다.
add-appxpackage "C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.120\14.0\Appx\Retail\x64\Microsoft.VCLibs.x64.12.00.Desktop.appx"
Visual Studio 2015 - 2022
다음은 Visual Studio 2015 이상 VCLibs 프레임워크 패키지 v14에 대한 매니페스트 항목의 예입니다.
<DesktopRegistration>
<DependencyList>
<KnownDependency Name="VC14"/>
</DependencyList>
</DesktopRegistration>
이 프레임워크 패키지를 사이드로드하려면
x86:
프레임워크 패키지를 찾습니다.
C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop\14.0\Appx\Retail\x86\Microsoft.VCLibs.x86.14.00.Desktop.appx
두 번 클릭하여 설치하거나 다음 Windows PowerShell 명령을 실행합니다.
add-appxpackage "C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop\14.0\Appx\Retail\x86\Microsoft.VCLibs.x86.14.00.Desktop.appx"
x64:
프레임워크 패키지를 찾습니다.
C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop\14.0\Appx\Retail\x64\Microsoft.VCLibs.x64.14.00.Desktop.appx
두 번 클릭하여 설치하거나 다음 Windows PowerShell 명령을 실행합니다.
add-appxpackage "C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop\14.0\Appx\Retail\x64\Microsoft.VCLibs.x64.14.00.Desktop.appx"
VS 2015 업데이트 3, VS 2017, VS 2019 및 VS 2022는 모두 동일한 REDIST를 사용하며 VS 2022가 최신 릴리스입니다. 추가 정보는 Microsoft Docs를 참조하세요.
로컬 테스트
적절한 매니페스트에 대한 참조를 포함시키고 APPX 프레임워크 패키지를 사이드로드한 다음, 다음 명령을 사용하여 앱의 느슨한 빌드 버전을 설치합니다.
WdApp.exe register loose_build_path
이렇게 하면 앱이 설치되고 적절한 프레임워크를 참조할 수 있습니다. 이제 시작 메뉴의 타일에서 앱을 실행하고 앱에 필요한 테스트 및 유효성 검사 단계를 수행합니다.
사이드로드 구성에서 테스트를 완료한 후 MSIXVC 패키징 도구를 사용하여 PC용 타이틀 패키징 시작하기 항목의 지침을 사용하여 MSIXVC 패키지를 만듭니다.
자세한 내용은 Centennial 프로젝트에서 Visual C++ 런타임 사용 블로그 게시물을 참조하세요.