Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Díky zavedení balíčků prostředků teď vývojáři mají nástroje pro vytváření dalších balíčků kromě dalších typů balíčků. S tím, jak se aplikace zvětší a složitější, bude se často skládat z více balíčků a složitost správy těchto balíčků se zvýší (zejména pokud vytváříte mimo Visual Studio a používáte mapovací soubory). Ke zjednodušení správy struktury balení aplikace můžete použít rozložení balení podporované MakeAppx.exe.
Rozložení balení je jeden dokument XML, který popisuje strukturu balení aplikace. Určuje sady aplikací (primární a volitelné), balíčky v sadách a soubory v balíčcích. Soubory je možné vybrat z různých složek, jednotek a síťových umístění. Zástupné znaky lze použít k výběru nebo vyloučení souborů.
Po nastavení rozložení balení pro aplikaci se používá spolu s MakeAppx.exe pro vytvoření všech balíčků pro aplikaci v jediném volání příkazového řádku. Rozložení balíčku lze upravit tak, aby změnilo strukturu balíčku tak, aby vyhovovalo vašim potřebám nasazení.
Příklad jednoduchého rozložení balení
Tady je příklad, jak vypadá jednoduché rozložení balení:
<PackagingLayout xmlns="http://schemas.microsoft.com/appx/makeappx/2017">
<PackageFamily ID="MyGame" FlatBundle="true" ManifestPath="C:\mygame\appxmanifest.xml" ResourceManager="false">
<!-- x64 code package-->
<Package ID="x64" ProcessorArchitecture="x64">
<Files>
<File DestinationPath="*" SourcePath="C:\mygame\*"/>
<File ExcludePath="*C:\mygame\*.txt"/>
</Files>
</Package>
<!-- Media asset package -->
<AssetPackage ID="Media" AllowExecution="false">
<Files>
<File DestinationPath="Media\**" SourcePath="C:\mygame\media\**"/>
</Files>
</AssetPackage>
</PackageFamily>
</PackagingLayout>
Pojďme si tento příklad rozdělit, abychom pochopili, jak funguje.
BalíčekRodina
Toto rozložení balení vytvoří jeden soubor balíčku jednoduché aplikace s balíčkem architektury x64 a balíčkem assetu „Media“.
Element PackageFamily slouží k definování sady aplikací. Atribut ManifestPath je nutné použít k poskytnutí AppxManifest pro sadu, AppxManifest by měl odpovídat AppxManifest balíčku architektury sady. Musí se zadat také atribut ID . Používá se s MakeAppx.exe během vytváření balíčku, abyste mohli vytvořit pouze tento balíček, pokud chcete, a to bude název souboru výsledného balíčku. Atribut FlatBundle se používá k popisu typu sady, kterou chcete vytvořit, true pro plochou sadu (o které si můžete přečíst více zde) a false pro klasickou sadu. Atribut ResourceManager se používá k určení, zda balíčky prostředků v rámci této sady budou používat MRT pro přístup k souborům. To je ve výchozím nastavení true, ale od Windows 10 verze 1803 to ještě není připraveno, takže tento atribut musí být nastaven na false.
Balíček a Balíček aktiv
V rámci PackageFamily jsou definovány balíčky, které sada aplikací obsahuje, nebo odkazy. V této části je balíček architektury (označovaný také jako hlavní balíček) definován pomocí elementu Package a balíček assetu je definován pomocí elementu AssetPackage . Balíček architektury musí určit, pro kterou architekturu je určen, a to buď x64, x86, arm, nebo neutrální. Můžete také (volitelně) přímo poskytnout AppxManifest speciálně pro tento balíček pomocí atributu ManifestPath znovu. Pokud není zadaný AppxManifest , jeden se automaticky vygeneruje z AppxManifestu poskytnutého pro PackageFamily.
Ve výchozím nastavení se pro každý balíček v rámci sady vygeneruje AppxManifest . Pro balíček assetu můžete také nastavit atribut AllowExecution . Pokud tuto hodnotu nastavíte na false (výchozí nastavení), sníží se čas publikování vaší aplikace, protože balíčky, které není potřeba spouštět, nebudou mít proces publikování zablokovaný virovou kontrolou (další informace najdete v tématu Úvod k balíčkům prostředků).
Soubory
V rámci každé definice balíčku můžete pomocí elementu File vybrat soubory, které se mají zahrnout do tohoto balíčku. Atribut SourcePath je místo, kde jsou soubory místně. Můžete vybrat soubory z různých složek (poskytnutím relativních cest), různých disků (poskytnutím absolutních cest) nebo dokonce síťových sdílení (poskytnutím podobného formátu jako \\myshare\myapp\*).
DestinationPath je místo, kde se soubory skončí v rámci balíčku vzhledem k kořenovému adresáři balíčku.
ExcludePath lze použít (místo dalších dvou atributů) k výběru souborů, které mají být vyloučeny z těch, které jsou vybrány jinými atributy SourcePath elementů File v rámci stejného balíčku.
Každý prvek File lze použít k výběru více souborů pomocí zástupných znaků. Obecně platí, že jeden zástupný znak (*) lze použít kdekoli v cestě libovolný početkrát. Jeden zástupný znak se ale bude shodovat pouze se soubory ve složce a ne s žádnými podsložkami. Lze například C:\MyGame\*\* použít ve zdrojové cestě k výběru souborů C:\MyGame\Audios\UI.mp3 a C:\MyGame\Videos\intro.mp4, ale nemůže vybrat C:\MyGame\Audios\Level1\warp.mp3. Dvojitý zástupný znak (**) lze použít také místo názvů složek nebo souborů, aby se shodovaly s něčím rekurzivně (ale nesmí být vedle částečných názvů). Například C:\MyGame\**\Level1\** může vybrat C:\MyGame\Audios\Level1\warp.mp3 a C:\MyGame\Videos\Bonus\Level1\DLC1\intro.mp4. Zástupné cardy lze také použít k přímé změně názvů souborů v rámci procesu balení, pokud se zástupné cardy používají na různých místech mezi zdrojem a cílem. Například mít C:\MyGame\Audios\* pro SourcePath a Sound\copy_* pro DestinationPath umožňuje vybrat C:\MyGame\Audios\UI.mp3 a zobrazí se v balíčku jako Sound\copy_UI.mp3. Obecně platí, že počet jednoduchých zástupných znaků a dvojitých zástupných znaků musí být stejný pro SourcePath a DestinationPath jednoho prvku File .
Příklad rozšířeného rozložení balení
Tady je příklad složitějšího rozložení balení:
<PackagingLayout xmlns="http://schemas.microsoft.com/appx/makeappx/2017">
<!-- Main game -->
<PackageFamily ID="MyGame" FlatBundle="true" ManifestPath="C:\mygame\appxmanifest.xml" ResourceManager="false">
<!-- x64 code package-->
<Package ID="x64" ProcessorArchitecture="x64">
<Files>
<File DestinationPath="*" SourcePath="C:\mygame\*"/>
<File ExcludePath="*C:\mygame\*.txt"/>
</Files>
</Package>
<!-- Media asset package -->
<AssetPackage ID="Media" AllowExecution="false">
<Files>
<File DestinationPath="Media\**" SourcePath="C:\mygame\media\**"/>
</Files>
</AssetPackage>
<!-- English resource package -->
<ResourcePackage ID="en">
<Files>
<File DestinationPath="english\**" SourcePath="C:\mygame\english\**"/>
</Files>
<Resources Default="true">
<Resource Language="en"/>
</Resources>
</ResourcePackage>
<!-- French resource package -->
<ResourcePackage ID="fr">
<Files>
<File DestinationPath="french\**" SourcePath="C:\mygame\french\**"/>
</Files>
<Resources>
<Resource Language="fr"/>
</Resources>
</ResourcePackage>
</PackageFamily>
<!-- DLC in the related set -->
<PackageFamily ID="DLC" Optional="true" ManifestPath="C:\DLC\appxmanifest.xml">
<Package ID="DLC.x86" Architecture="x86">
<Files>
<File DestinationPath="**" SourcePath="C:\DLC\**"/>
</Files>
</Package>
</PackageFamily>
<!-- DLC not part of the related set -->
<PackageFamily ID="Themes" Optional="true" RelatedSet="false" ManifestPath="C:\themes\appxmanifest.xml">
<Package ID="Themes.main" Architecture="neutral">
<Files>
<File DestinationPath="**" SourcePath="C:\themes\**"/>
</Files>
</Package>
</PackageFamily>
<!-- Existing packages that need to be included/referenced in the bundle -->
<PrebuiltPackage Path="C:\prebuilt\DLC2.appxbundle" />
</PackagingLayout>
Tento příklad se liší od jednoduchého příkladu s přidáním elementů ResourcePackage a Optional .
Balíčky prostředků lze zadat pomocí elementu ResourcePackage . V rámci ResourcePackage musí být element Resources použit k určení kvalifikátorů prostředků balíčku prostředků. Kvalifikátory prostředků jsou prostředky, které jsou podporovány sadou prostředků, zde vidíme, že jsou definované dva balíčky prostředků, které obsahují soubory specifické pro angličtinu a francouzštinu. Balíček prostředků může mít více než jeden kvalifikátor. To lze provést přidáním dalšího prvku Resource v rámci resources. Výchozí prostředek pro dimenzi prostředku musí být zadán také v případě, že dimenze existuje (dimenze jsou jazyk, měřítko, dxfl). Zde vidíme, že angličtina je výchozím jazykem, což znamená, že uživatelé, kteří nemají systémový jazyk nastavený na francouzštinu, si stáhnou anglický balíček zdrojů a zobrazí se v angličtině.
Volitelné balíčky mají vlastní odlišné názvy rodin balíčků a musí být definovány pomocí elementů PackageFamily a zároveň zadat volitelný atribut, který má být pravdivý. Atribut RelatedSet se používá k určení, zda volitelný balíček je v související sadě (ve výchozím nastavení je true) – zda má být volitelný balíček aktualizován s primárním balíčkem.
PrebuiltPackage se používá k přidání balíčků, jež nejsou definovány v rozložení balení, aby byly zahrnuty nebo na ně bylo odkazováno v souborech sady aplikací, které se mají sestavit. V tomto případě se zde nachází další volitelný balíček DLC, aby na něj mohl odkazovat primární soubor sady aplikací a měl by být součástí související sady.
Vytvořte balíčky aplikací s uspořádáním balíčků a MakeAppx.exe
Jakmile máte rozložení balíčku pro aplikaci, můžete začít používat MakeAppx.exe k sestavení balíčků aplikace. Pokud chcete sestavit všechny balíčky definované v rozložení balíčku, použijte příkaz:
MakeAppx.exe build /f PackagingLayout.xml /op OutputPackages\
Pokud ale aktualizujete aplikaci a některé balíčky neobsahují žádné změněné soubory, můžete sestavit pouze balíčky, které se změnily. V příkladu jednoduchého rozložení balíčků na této stránce a sestavení balíčku architektury x64 bude tento příkaz vypadat takto:
MakeAppx.exe build /f PackagingLayout.xml /id "x64" /ip PreviousVersion\ /op OutputPackages\ /iv
Příznak /id lze použít k výběru balíčků, které se mají sestavit z rozložení balení, odpovídající atributu ID v rozložení. Slouží /ip k označení, kde jsou v tomto případě předchozí verze balíčků. Předchozí verze musí být poskytována, protože soubor sady aplikací musí stále odkazovat na předchozí verzi balíčku Media . Příznak /iv se používá k automatickému zvýšení verze sestavených balíčků (místo změny verze v AppxManifestu). Případně lze přepínače /pv a /bv použít k přímému poskytnutí verze balíčku (pro vytvoření všech balíčků) a verze balíku (pro vytvoření všech balíků) v uvedeném pořadí.
Pokud chcete na této stránce sestavit pouze volitelný balíček Themes a balíček aplikace Themes.main, na který se odkazuje, použijte tento příkaz:
MakeAppx.exe build /f PackagingLayout.xml /id "Themes" /op OutputPackages\ /bc /nbp
Příznak /bc se používá k označení, že podřízené položky sady Motivy by měly být také sestaveny (v tomto případě Themes.main budou vytvořeny). Vlajka /nbp se používá k označení, že nadřazený balíček Themes by neměl být sestaven. Nadřazená položka Motivy, což je volitelná sada aplikací, je primární sada aplikací: MyGame. Pro volitelný balíček v související sadě musí být také sestaven primární balíček aplikace, který se má nainstalovat, protože na volitelný balíček se odkazuje také v primární sadě aplikací, když je v související sadě (aby se zajistilo správa verzí mezi primárním a volitelným balíčkem). Vztah nadřazenosti a podřízenosti mezi balíčky je znázorněn v následujícím diagramu: