Entwickeln mit Bestandspaketen und PaketfaltungDeveloping with asset packages and package folding

Wichtig

Wenn Sie beabsichtigen, Ihre APP an den Store zu übermitteln, müssen Sie sich an den Windows-Entwickler Support wenden und eine Genehmigung zur Verwendung von Asset-Paketen und Paket Faltung erhalten.If you intend to submit your app to the Store, you need to contact Windows developer support and get approval to use asset packages and package folding.

Mit Asset-Paketen können Sie die Gesamtgröße und die Veröffentlichungszeit für Ihre apps im Store verringern.Asset packages can decrease the overall packaging size and publishing time for your apps to the Store. Weitere Informationen zu Asset-Paketen und dazu, wie Sie Ihre Entwicklungs Iterationen beschleunigen können, finden Sie unter Einführung in Asset-Pakete.You can learn more about asset packages and how it can speed up your development iterations at Introduction to asset packages.

Wenn Sie Ressourcen Pakete für Ihre APP verwenden möchten oder bereits wissen, dass Sie Sie verwenden möchten, Fragen Sie sich wahrscheinlich, wie Asset-Pakete Ihren Entwicklungsprozess ändern werden.If you are thinking about using asset packages for your app or already know that you want to use it, then you are probably wondering about how asset packages will change your development process. Kurz gesagt, die APP-Entwicklung bleibt unverändert. Dies ist aufgrund der Paket Faltung für Asset-Pakete möglich.In short, app development for you stays the same - this is possible because of package folding for asset packages.

Dateizugriff nach dem Aufteilen der APPFile access after splitting your app

Um zu verstehen, wie sich das Falten von Paketen nicht auf den Entwicklungsprozess auswirkt, gehen wir zuerst zurück, um zu verstehen, was passiert, wenn Sie Ihre APP in mehrere Pakete aufteilen (mit Ressourcen Paketen oder Ressourcen Paketen).To understand how package folding doesn’t impact your development process, let’s step back first to understand what happens when you split your app into multiple packages (with either asset packages or resource packages).

Wenn Sie einige der Dateien Ihrer APP in andere Pakete aufteilen (keine Architektur Pakete), können Sie auf einer hohen Ebene nicht direkt auf diese Dateien zugreifen, wenn Ihr Code ausgeführt wird.At a high level, when you split some of your app’s files into other packages (that are not architecture packages), you will not be able to access those files directly relative to where your code runs. Dies liegt daran, dass diese Pakete alle in verschiedenen Verzeichnissen installiert werden, in denen das Architektur Paket installiert ist.This is because these packages are all installed into different directories from where your architecture package is installed. Wenn Sie z. b. ein Spiel treffen und Ihr Spiel in Französisch und Deutsch lokalisiert ist und Sie sowohl für x86-als auch für x64-Computer erstellt haben, sollten Sie über diese APP-Paketdateien im App Bundle Ihres Spiels verfügen:For example, if you’re making a game and your game is localized into French and German and you built for both x86 and x64 machines, then you should have these app package files within the app bundle of your game:

  • MyGame_1 MyGame_1.0_x86. AppXMyGame_1.0_x86.appx
  • MyGame_1 MyGame_1.0_x64. AppXMyGame_1.0_x64.appx
  • MyGame_1 MyGame_1.0_language-Fr. AppXMyGame_1.0_language-fr.appx
  • MyGame_1 MyGame_1.0_language-de. AppXMyGame_1.0_language-de.appx

Wenn Ihr Spiel auf dem Computer eines Benutzers installiert ist, verfügt jede APP-Paketdatei über einen eigenen Ordner im Verzeichnis " Windowsapps ".When your game is installed to a user’s machine, each app package file will have its own folder in the WindowsApps directory. Bei einem französischen Benutzer mit 64-Bit-Windows sieht Ihr Spiel also wie folgt aus:So for a French user running 64-bit Windows, your game will look like this:

C:\Program Files\WindowsApps\
|-- MyGame_1.0_x64
|   `-- …
|-- MyGame_1.0_language-fr
|   `-- …
`-- …(other apps)

Beachten Sie, dass die APP-Paketdateien, die für den Benutzer nicht anwendbar sind, nicht installiert werden (x86-und German-Pakete).Note that the app package files that are not applicable to the user will not be installed (the x86 and German packages).

Für diesen Benutzer befindet sich die Haupt-ausführbare Datei des Spiels im Ordner " MyGame_1.0_x64 " und wird von dort aus ausgeführt. normalerweise hat er nur Zugriff auf die Dateien in diesem Ordner.For this user, your game’s main executable will be within the MyGame_1.0_x64 folder and will run from there, and normally, it will only have access to the files within this folder. Um auf die Dateien im Ordner " MyGame_1.0_language-fr " zuzugreifen, müssten Sie entweder die MRT-APIs oder die packagemanager-APIs verwenden.In order to access the files in the MyGame_1.0_language-fr folder, you would have to use either the MRT APIs or the PackageManager APIs. Die MRT-APIs können automatisch die am besten geeignete Datei aus den installierten Sprachen auswählen. Weitere Informationen zu MRT-APIs finden Sie unter Windows. applicationmodel. resources. Core.The MRT APIs can automatically select the most appropriate file from the languages installed, you can find out more about MRT APIs at Windows.ApplicationModel.Resources.Core. Alternativ können Sie den installierten Speicherort des französischen Sprachpakets mithilfe der packagemanager-Klasseermitteln.Alternatively, you can find the installed location of the French language package using the PackageManager Class. Sie sollten niemals den installierten Speicherort der Pakete Ihrer APP übernehmen, da dies sich ändern kann und zwischen den Benutzern variieren kann.You should never assume the installed location of the packages of your app since this can change and can vary between users.

Objektpaket FaltungAsset package folding

Wie können Sie also auf die Dateien in ihren Asset-Paketen zugreifen?So how can you access the files in your asset packages? Nun können Sie weiterhin die Datei Zugriffs-APIs verwenden, die Sie verwenden, um auf eine beliebige andere Datei in Ihrem Architektur Paket zuzugreifen.Well, you can continue to use the file access APIs you are using to access any other file in your architecture package. Dies liegt daran, dass assetpaketdateien in das Architektur Paket gefaltet werden, wenn es durch den Paket Faltungs Prozess installiert wird.This is because asset package files will be folded into your architecture package when it is installed through the package folding process. Da Ressourcenpaket Dateien ursprünglich Dateien in ihren Architektur Paketen enthalten sollten, bedeutet dies, dass Sie die API-Verwendung nicht ändern müssen, wenn Sie von der Bereitstellung von locker-Dateien in die gepackte Bereitstellung in Ihrem Entwicklungsprozess wechseln.Furthermore, since asset package files should originally be files within your architecture packages, this means that you would not have to change API usage when you move from loose files deployment to packaged deployment in your development process.

Um mehr über die Funktionsweise der Paket Faltung zu erfahren, beginnen wir mit einem Beispiel.To understand more about how package folding works, let’s start with an example. Wenn Sie ein Spiel Projekt mit der folgenden Dateistruktur haben:If you have a game project with the following file structure:

MyGame
|-- Audios
|   |-- Level1
|   |   `-- ...
|   `-- Level2
|       `-- ...
|-- Videos
|   |-- Level1
|   |   `-- ...
|   `-- Level2
|       `-- ...
|-- Engine
|   `-- ...
|-- XboxLive
|   `-- ...
`-- Game.exe

Wenn Sie Ihr Spiel in drei Pakete aufteilen möchten: ein x64-Architektur Paket, ein Asset-Paket für Audios und ein Medienobjekt Paket für Videos, wird Ihr Spiel in diese Pakete aufgeteilt:If you want to split your game into 3 packages: an x64 architecture package, an asset package for audios, and an asset package for videos, your game will be divided into these packages:

MyGame_1.0_x64.appx
|-- Engine
|   `-- ...
|-- XboxLive
|   `-- ...
`-- Game.exe
MyGame_1.0_Audios.appx
`-- Audios
    |-- Level1
    |   `-- ...
    `-- Level2
        `-- ...
MyGame_1.0_Videos.appx
`-- Videos
    |-- Level1
    |   `-- ...
    `-- Level2
        `-- ...

Wenn Sie das Spiel installieren, wird das x64-Paket zuerst bereitgestellt.When you install your game, the x64 package will be deployed first. Anschließend werden die beiden Ressourcen Pakete weiterhin in ihren eigenen Ordnern bereitgestellt, genauso wie MyGame_1.0_language-fr aus dem vorherigen Beispiel.Then the two asset packages will still be deployed to their own folders, just like MyGame_1.0_language-fr from our previous example. Aufgrund der Paket Faltung werden die Ressourcenpaket Dateien jedoch auch hart verknüpft, damit Sie im Ordner " MyGame_1.0_x64 " angezeigt werden. (obwohl die Dateien an zwei Orten angezeigt werden, nehmen Sie nicht zweimal den Speicherplatz in Anspruch.)However, because of package folding, the asset package files will also be hard linked to appear in the MyGame_1.0_x64 folder (so even though the files appear in two locations, they do not take up twice the disk space). Der Speicherort, an dem die Medienobjekt Paketdateien in angezeigt werden, ist genau der Speicherort, an dem Sie sich relativ zum Stamm des Pakets befinden.The location in which the asset package files will appear in is exactly the location that they are at relative to the root of the package. So sieht das endgültige Layout des bereitgestellten Spiels wie folgt aus:So here’s what the final layout of the deployed game will look like:

C:\Program Files\WindowsApps\
|-- MyGame_1.0_x64
|   |-- Audios
|   |   |-- Level1
|   |   |   `-- ...
|   |   `-- Level2
|   |       `-- ...
|   |-- Videos
|   |   |-- Level1
|   |   |   `-- ...
|   |   `-- Level2
|   |       `-- ...
|   |-- Engine
|   |   `-- ...
|   |-- XboxLive
|   |   `-- ...
|   `-- Game.exe
|-- MyGame_1.0_Audios
|   `-- Audios
|       |-- Level1
|       |   `-- ...
|       `-- Level2
|           `-- ...
|-- MyGame_1.0_Videos
|   `-- Videos
|       |-- Level1
|       |   `-- ...
|       `-- Level2
|           `-- ...
`-- …(other apps)

Wenn Sie die Paket Faltung für Asset-Pakete verwenden, können Sie weiterhin auf die Dateien, die Sie in Ressourcen Pakete aufgeteilt haben, auf dieselbe Weise zugreifen (Beachten Sie, dass der Architektur Ordner dieselbe Struktur wie der ursprüngliche Projektordner aufweist), und Sie können Asset-Pakete hinzufügen oder Dateien zwischen Asset-Paketen verschieben, ohne dass sich dies auf den Code auswirkt.When using package folding for asset packages, you can still access the files you’ve split into asset packages the same way (notice that the architecture folder has the exact same structure as the original project folder), and you can add asset packages or move files between asset packages without impacting your code.

Für ein komplizierteres Paket Faltungs Beispiel.Now for a more complicated package folding example. Nehmen wir an, Sie möchten Ihre Dateien stattdessen auf der Ebene aufteilen, und wenn Sie dieselbe Struktur wie der ursprüngliche Projektordner behalten möchten, sollten die Pakete wie folgt aussehen:Let’s say that you want to split your files based on level instead, and if you want to keep the same structure as the original project folder, your packages should look like this:

MyGame_1.0_x64.appx
|-- Engine
|   `-- ...
|-- XboxLive
|   `-- ...
`-- Game.exe
MyGame_Level1.appx
|-- Audios
|   `-- Level1
|       `-- ...
`-- Videos
    `-- Level1
        `-- ...

MyGame_Level2.appx
|-- Audios
|   `-- Level2
|       `-- ...
`-- Videos
    `-- Level2
        `-- ...

Dadurch können die Ordner und Dateien im Ordner " MyGame_Level1 " und " Level2 " im Paket " MyGame_Level2 " während der Paket Faltung in den Ordnern " Audios " und " Videos " zusammengeführt werden.This will allow the Level1 folders and files in the MyGame_Level1 package and Level2 folders and files in the MyGame_Level2 package to be merged into the Audios and Videos folders during package folding. Als allgemeine Regel gilt: der relative Pfad, der für Paketdateien in der Zuordnungsdatei oder das Paketierungs Layout für MakeAppx.exe festgelegt ist, ist der Pfad, den Sie nach dem Falten des Pakets verwenden solltenSo as a general rule, the relative path designated for packaged files in the mapping file or packaging layout for MakeAppx.exe is the path you should use to access them after package folding.

Wenn zwei Dateien in unterschiedlichen assetpaketen vorhanden sind, die dieselben relativen Pfade aufweisen, führt dies zu einem Konflikt beim Falten des Pakets.Lastly, if there are two files in different asset packages that have the same relative paths, this will cause a collision during package folding. Wenn ein Konflikt auftritt, führt die Bereitstellung Ihrer APP zu einem Fehler und schlägt fehl.If a collision occurs, the deployment of your app will result in an error and fail. Da bei der Paket Faltung auch feste Verknüpfungen genutzt werden, kann Ihre APP bei Verwendung von Ressourcen Paketen nicht auf nicht-NTFS-Laufwerken bereitgestellt werden.Also, because package folding takes advantage of hard links, if you do use asset packages, your app will not be able to be deployed to non-NTFS drives. Wenn Sie wissen, dass Ihre APP wahrscheinlich von Ihren Benutzern auf Wechsel Datenträger verschoben wird, sollten Sie keine Asset-Pakete verwenden.If you know your app will likely be moved to removable drives by your users, then you should not use asset packages.