리소스 패키지

리소스 패키지는 언어를 분할하거나 특정 자산을 사용자 컴퓨터 구성에 따라 Windows에서 자동으로 다운로드하는 별도의 패키지로 확장하여 사용자 디스크 공간을 줄이는 좋은 방법을 제공합니다. 사용자가 지역 및 언어 설정의 OS 언어 목록에 새 언어 를 추가하거나 표시 구성을 변경하는 경우 자동 저장소 업데이트에서 OS는 디바이스에 설치된 모든 앱에 적용 가능한 리소스 패키지를 가져옵니다.

Windows SDK 10.0.17095.0 AddResourcePackageAsync API 에서 개발자는 요청 시 앱에 대한 리소스 패키지를 설치할 수 있습니다.

AddResourcePackageAsync API를 사용하는 방법

  • AddResourcePackageAsync는 애플리케이션의 PackageFamilyName 및 다운로드하려는 리소스 패키지를 고유하게 식별하는 리소스 ID를 사용합니다. 리소스 ID는 리소스 패키지의 AppxManifest.xml에 있는 ResourceId 요소에 해당합니다.

  • 애플리케이션에서 사용할 수 있는 모든 리소스의 병합된 보기를 얻으려면 애플리케이션을 다시 시작해야 합니다. API는 애플리케이션을 다시 시작하기 위해 전달할 수 있는 ForceTargetApplicationShutdown 옵션을 제공합니다.

  • 리소스 패키지를 다운로드할 때 애플리케이션에 사용할 수 있는 업데이트가 있는 경우 이전 버전의 앱을 더 이상 사용할 수 없으므로 API가 실패합니다. ApplyUpdateIfAvailable 플래그를 전달하면 API는 앱을 업데이트하고 요청된 리소스 패키지를 동일한 다운로드의 일부로 가져옵니다.

  • API는 애플리케이션에 표시할 수 있는 다운로드 진행률을 반환합니다. 또한 저장소에 게시된 앱의 경우 리소스 패키지 획득이 Microsoft Store 다운로드 및 업데이트 페이지에 표시되고 애플리케이션에 대한 업데이트로 표시됩니다. 최종 사용자는 Microsoft Store에서 리소스 패키지 다운로드를 일시 중지하거나 취소하도록 선택할 수 있습니다.

예시

 private async void DownloadGermanResourcePackage(object sender, RoutedEventArgs e)
{            
    // ResourceId that is unique to the resource package
    string resourceId = "split.language-de";
    // Warn user that application will need to restart.
    // To take update if available pass in the ApplyUpdateIfAvailable flag
    var packageCatalog = PackageCatalog.OpenForCurrentPackage();
    PackageCatalogAddResourcePackageResult result = await packageCatalog.AddResourcePackageAsync("29270depappf.CaffeMacchiato_gah1vdar1nn7a", resourceId, 
        AddResourcePackageOptions.ApplyUpdateIfAvailable | AddResourcePackageOptions.ForceTargetApplicationShutdown)
        .AsTask<PackageCatalogAddResourcePackageResult, PackageInstallProgress>(new Progress
        (progress =>;
        {
                // Draw progress
        }));

        if (result.ExtendedError != null)
        {
                //Display error or retry if needed
        }
}

유효성 검사

로컬 유효성 검사를 위해 개발자는 .msixbundle 또는 .appxbundle을 만들고 로컬 드라이브, 네트워크 공유 또는 웹 서버에서 설치할 수 있습니다. 앱이 AddResourcePackageAsync API를 호출하면 Windows는 원래 애플리케이션이 설치된 위치에서 리소스 패키지를 가져옵니다. 이렇게 하면 유효성 검사가 간단해집니다. 이 작업이 작동하면 앱을 배포할 준비가 된 것입니다.

리소스 패키지 제거

앱은 RemoveResourcePackageAsync API를 통해 다운로드한 리소스 패키지를 제거하도록 선택할 수 있습니다. 그러나 사용자 또는 디바이스 전체에 적용할 수 있는 리소스 패키지는 제거할 수 없습니다.

예제

 private async void RemoveResourcePackage(object sender, RoutedEventArgs e)
{            
    var packageCatalog = PackageCatalog.OpenForCurrentPackage();
    List resourcePackagesToRemove = new List();
    resourcePackagesToRemove.Add("split.language-de");
    //Warn user that application will be restarted
    var removePackageResult = await packageCatalog.RemoveResourcePackagesAsync(resourcePackagesToRemove);
    if (removePackageResult.ExtendedError != null)
    {
        // display error
    }
}