리소스 패키지
리소스 패키지는 언어를 분할하거나 특정 자산을 사용자 컴퓨터 구성에 따라 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
}
}
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기