Einführung in Bestandspakete

Wichtig

Wenn Sie Ihre App an den Store übermitteln möchten, müssen Sie sich an den Windows-Entwicklersupport wenden und die Genehmigung für die Verwendung von Bestandspaketen erhalten.

Bestandspakete sind ein Pakettyp, der als zentraler Speicherort für die gemeinsamen Dateien einer Anwendung fungiert – wodurch die Notwendigkeit doppelter Dateien in allen Architekturpaketen vermieden wird. Bestandspakete ähneln Ressourcenpaketen darin, dass sie beide so konzipiert sind, dass sie statische Inhalte enthalten, die für die Ausführung Ihrer App erforderlich sind, aber unterscheiden sich darin, dass alle Bestandspakete immer heruntergeladen werden, unabhängig von der Systemarchitektur, Sprache oder Anzeigeskala des Benutzers.

Asset Package Bundle Diagram

Da Bestandspakete alle architektur-, sprach- und skalierungsunabhängigen Dateien enthalten, führt die Nutzung von Bestandspaketen zu einer geringeren Gesamtgröße der verpackten App (da diese Dateien nicht mehr dupliziert werden), was Ihnen hilft, den lokalen Entwicklungsspeicherplatz für große Apps zu verwalten und die Pakete Ihrer App im Allgemeinen zu verwalten.

Wie wirken sich Bestandspakete auf die Veröffentlichung aus?

Der offensichtlichste Vorteil von Bestandspaketen ist die reduzierte Größe von verpackten Apps. Kleinere App-Pakete beschleunigen den Veröffentlichungsprozess der App, da der Store weniger Dateien verarbeiten muss; dies ist jedoch nicht der wichtigste Vorteil von Bestandspaketen.

Wenn ein Bestandspaket erstellt wird, können Sie angeben, ob das Paket ausgeführt werden darf. Da Bestandspakete nur architekturunabhängige Dateien enthalten sollten, enthalten sie im Allgemeinen keine .dll- oder .exe-Dateien, so dass Bestandspakete in der Regel nicht ausgeführt werden müssen. Die Bedeutung dieser Unterscheidung liegt darin, dass während des Veröffentlichungsprozesses alle ausführbaren Pakete gescannt werden müssen, um sicherzustellen, dass sie keine Malware enthalten, und dieser Scanvorgang dauert bei größeren Paketen länger. Wenn ein Paket jedoch als nicht ausführbare Datei festgelegt ist, stellt die Installation der App sicher, dass Dateien, die in diesem Paket enthalten sind, nicht ausgeführt werden können. Diese Garantie macht einen vollständigen Paketscan überflüssig und verkürzt die Zeit für den Malware-Scan während der Veröffentlichung der App (und auch für Updates) erheblich - so wird die Veröffentlichung von Apps, die Asset-Pakete verwenden, deutlich schneller. Beachten Sie, dass Flat-Bundle-App-Pakete auch verwendet werden müssen, um diesen Veröffentlichungsvorteil zu erhalten, da dadurch der Store jede .appx- oder .msix-Paketdatei parallel verarbeiten kann.

Sollte ich Bestandspakete verwenden?

Das Aktualisieren der Dateistruktur Ihrer App, um die Verwendung von Bestandspaketen zu nutzen, kann zu spürbaren Vorteilen führen: reduzierte Paketgröße und schlankere Entwicklungsiterationen. Wenn Ihre Architekturpakete alle eine erhebliche Menge an Dateien gemeinsam enthalten oder wenn der Großteil Ihrer App aus nicht ausgeführten Dateien besteht, wird dringend empfohlen, die zusätzliche Zeit für die Konvertierung in die Verwendung von Bestandspaketen zu investieren.

Es sollte jedoch darauf hingewiesen werden, dass Bestandspakete kein Mittel sind, um die Optionalität von App-Inhalten zu erreichen. Bestandspaketdateien sind nicht optional und werden unabhängig von der Architektur, Sprache oder Skalierung des Zielgeräts immer heruntergeladen – alle optionalen Inhalte, die Ihre App unterstützen soll, sollten mit optionalen Paketen implementiert werden.

So erstellen Sie ein Bestandspaket

Die einfachste Möglichkeit zum Erstellen von Bestandspaketen ist die Verwendung des Verpackungslayouts. Bestandspakete können jedoch auch manuell mit MakeAppx.exe erstellt werden. Um anzugeben, welche Dateien in das Bestandspaket aufgenommen werden sollen, müssen Sie eine „Zuordnungsdatei“ erstellen. In diesem Beispiel ist die einzige Datei im Bestandspaket „Video.mp4“, aber alle Dateien des Bestandspakets sollten hier aufgelistet werden. Beachten Sie, dass der ResourceDimensions-Bezeichner in ResourceMetadata für Bestandspakete ausgelassen wird (im Vergleich zu einer Zuordnungsdatei für Ressourcenpakete).

[ResourceMetadata]
"ResourceId"        "Videos"

[Files]
"Video.mp4"         "Video.mp4"

Verwenden Sie einen dieser Befehle, um das Bestandspaket mit MakeAppx.exe (für MSIX und .appx) zu erstellen.

MakeAppx.exe pack /r /m AppxManifest.xml /f MappingFile.txt /p Videos.appx
MakeAppx.exe pack /r /m AppxManifest.xml /f MappingFile.txt /p Videos.msix

Beachten Sie hier, dass alle Dateien, auf die in appxManifest (die Logodateien) verwiesen wird, nicht in Bestandspakete verschoben werden können – diese Dateien müssen über Architekturpakete hinweg dupliziert werden.

Bestandspakete sollten auch keine resources.pri enthalten; MRT kann nicht für den Zugriff auf Bestandspaketdateien verwendet werden. Weitere Informationen über den Zugriff auf Bestandspaketdateien und darüber, warum Bestandspakete erfordern, dass Ihre App auf einem NTFS-Laufwerk installiert wird, finden Sie unter Entwickeln mit Bestandspaketen und Paketfaltung.

Um zu steuern, ob ein Bestandspaket ausgeführt werden darf oder nicht, können Sie uap6:AllowExecution im Eigenschaften-Element des AppxManifest verwenden. Außerdem müssen Sie dem Paket-Element der obersten Ebene uap6 hinzufügen, um zu Folgendem zu werden:

<Package IgnorableNamespaces="uap uap6" 
xmlns:uap6="http://schemas.microsoft.com/appx/manifest/uap/windows10/6" 
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" 
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10">

Wenn nicht angegeben, ist der Standardwert für AllowExecutiontrue – legen Sie ihn für Bestandpakete ohne ausführbare Dateien auf false fest, um die Veröffentlichung zu beschleunigen.