다음을 통해 공유


MSIX 프레임워크 패키지 및 동적 종속성

이 문서에서는 MSIX 프레임워크 패키지와 관련된 중요한 개념을 소개합니다. 이 문서의 정보는 Windows 앱 SDK 및 Windows 11 OS에서 동적 종속성 기능의 디자인과 용도를 더 잘 이해하는 데 도움이 되는 유용한 컨텍스트를 제공합니다. 이 기능을 사용하면 앱이 런타임에 MSIX 프레임워크 패키지를 참조하고 사용할 수 있습니다.

프레임워크 패키지 및 패키지 그래프

MSIX 는 최신 패키징 및 배포 환경을 제공하는 패키지 형식입니다. 또한 MSIX 프레임워크 패키지를 통해 재배포 가능 라이브러리, 콘텐츠 및 구성 요소를 패키지하는 깨끗하고 신뢰할 수 있는 방법을 제공합니다. MSIX 프레임워크 패키지를 사용하면 패키지된 앱이 앱 패키지에 묶는 대신 사용자 디바이스의 단일 공유 원본을 통해 구성 요소에 액세스할 수 있습니다. 일반적인 프레임워크 패키지에는 Windows 앱 SDK (WinUI3 포함), WinUI2, VCLibs 및 DirectX 런타임이 포함됩니다.

Windows 8부터 Windows 10 및 Windows 11까지 모든 프로세스에는 프레임워크, 리소스, 선택 사항 및 기본 패키지를 포함하여 앱에서 사용할 수 있는 모든 패키지 목록을 제공하는 패키지 그래프 가 있습니다. 이 그래프를 사용하면 앱이 참조된 패키지에서 제공하는 DLL, 콘텐츠 및 런타임 클래스 선언을 로드할 수 있습니다. 지금까지 이 그래프는 프로세스 생성 시 수정되었으며 런타임에 변경할 방법이 없었습니다.

  • 패키지된 앱의 경우 그래프는 앱의 패키지 매니페스트에 있는 PackageDependency 요소에 선언된 패키지 종속성을 기반으로 초기화되었습니다. 패키지된 앱을 빌드할 때, 프로젝트 참조 및 종속성을 기반으로 빌드 프로세스 중에 자동으로 수행됩니다.
  • 패키지되지 않은 앱의 경우 패키지 그래프가 비어 있으며 변경할 수 없습니다. 따라서 패키지되지 않은 앱은 표준 DLL 검색 순서 로 제한되었으며 프레임워크 패키지에 액세스할 수 없습니다.

이 정적 패키지 그래프 제한은 Windows 앱 SDK Windows 11 모두에서 동적 종속성 지원이 도입되어 해제됩니다. 개발자는 동적 종속성을 사용하여 런타임에 앱에서 MSIX 프레임워크 패키지를 참조하고 사용할 수 있습니다. 동적 종속성은 앱에서 정적 패키지 그래프 제한을 제거하고 개발자는 프레임워크 패키지를 활용하는 방법을 결정할 수 있습니다.

동적 종속성에 대한 기본 시나리오

동적 종속성을 사용하면 모든 앱이 런타임에 패키지 프레임워크 종속성을 추가할 수 있지만, 이 기능은 주로 외부 저장 위치나 비패키지 앱으로 패키지된 앱에 사용됩니다. 패키지된 앱은 패키지 매니페스트의 PackageDependency 요소를 통해 정적 종속성을 계속 추가할 수 있습니다.

  • 대부분의 개발자는 외부 위치에서 패키지된 앱이나 패키지되지 않은 앱을 위한 Windows 앱 SDK 프레임워크 패키지를 참조하기 위해 동적 종속성을 사용하여, 앱이 Windows 앱 SDK 런타임에서 제공하는 API를 호출할 수 있습니다. 이 시나리오에 대한 자세한 내용은 외부 위치 또는 패키지되지 않은패키지된 앱에 Windows 앱 SDK 런타임 사용을 참조하세요.
  • 경우에 따라 개발자는 동적 종속성을 사용하여 WinUI2 또는 DirectX 런타임에 대한 프레임워크 패키지와 같이 패키지되지 않은 앱에서 다른 프레임워크 패키지(Windows 앱 SDK 프레임워크 패키지 제외)를 참조하려고 할 수 있습니다. 이 시나리오에 대한 자세한 내용은 동적 종속성 API를 사용하여 런타임MSIX 패키지를 참조하세요.

프레임워크 패키지에 대한 서비스 모델

동적 종속성 기능은 런타임에 동적으로 참조되고 사용되는 프레임워크 패키지에 대한 서비스 파이프라인의 무결성을 유지합니다.

MSIX 프레임워크 패키지는 병렬 모델에서 서비스를 지원합니다. 즉, 각 버전은 별도의 버전이 지정된 폴더에 설치됩니다. 이렇게 하면 최신 앱이 최신 버전의 프레임워크 패키지를 설치하는 경우에도 사용 중인 애플리케이션이 계속 실행되고 실행될 수 있습니다. OS에는 설치 시간 참조 및 패키지에 대한 런타임 참조의 존재에 따라 지정된 프레임워크 패키지의 이전 버전을 삭제하는 시기에 대한 제거 논리가 있습니다.

  • 앱이 설치되면 프레임워크 패키지에 대한 설치 시간 참조 만들 수 있습니다. 이 참조는 앱이 설치된 동안 OS가 프레임워크 패키지를 제거하지 않도록 앱이 지정된 프레임워크 패키지에 종속되어 있음을 OS에 알릴 수 있습니다.
  • 앱이 프레임워크 패키지에서 API 또는 콘텐츠를 사용해야 하는 경우 프레임워크 패키지에 런타임 참조 를 추가할 수 있습니다. 이 참조는 프레임워크 패키지가 활성 상태임을 OS에 알리고, 모든 버전 업데이트가 기존 버전과 병행하여 처리되도록 합니다. 프레임워크 패키지의 새 버전이 설치되어 있지만 실행 중인 앱에 이전 버전이 사용 중인 경우 OS는 이전 버전에 대한 모든 런타임 참조가 제거될 때까지 이전 버전을 제거할 수 없습니다.

예를 들어 이 시나리오를 고려하면 다음과 같습니다.

  • 앱 A 는 지정된 프레임워크 패키지의 버전 1.0.0.0을 실행하고 사용합니다.
  • 앱 B 가 설치되고 동일한 프레임워크 패키지의 버전 1.0.0.1에 종속됩니다.

이 시나리오에서는 두 버전의 프레임워크 패키지가 모두 설치되고 App AApp B에서 사용됩니다. 그러나 사용자가 App A를 닫았다가 다시 시작하면, 그 앱은 최신 프레임워크 패키지 버전 1.0.0.1을 자동으로 적용하게 됩니다. 이 시점에서 런타임 참조 요구 사항은 프레임워크 패키지 버전 1.0.0.0에 더 이상 유효하지 않으며 OS는 1.0.0.0 버전을 안전하게 제거할 수 있습니다. 나중에 App AApp B가 사용자에 의해 제거될 때, 설치 시 참조 요구 사항이 더 이상 유효하지 않으며 운영 체제에서 프레임워크 패키지를 완전히 제거하는 것이 안전합니다.

PackageDependency 요소를 사용하여 프레임워크 패키지에 대한 정적 참조를 지정하는 패키지된 앱의 경우 앱이 설치되거나 제거될 때 프레임워크 패키지에 대한 설치 시간 참조가 OS에서 추적됩니다. 동적 종속성 기능을 사용하여 관리되는 런타임 참조의 경우 OS는 패키지된 앱이 실행되는 시기를 알고 있으며 최신 패키지를 사용할 수 있을 때 사용 중인 프레임워크 패키지를 제거하지 않습니다.