Freigeben über


MSIX-Frameworkpakete und dynamische Abhängigkeiten

In diesem Artikel werden wichtige Konzepte im Zusammenhang mit MSIX-Frameworkpaketen vorgestellt. Die Informationen in diesem Artikel enthalten nützliche Kontexte, mit denen Sie das Design und den Zweck der dynamischen Abhängigkeiten im Windows App SDK und im Windows 11-Betriebssystem besser verstehen können. Mit diesem Feature können Ihre Apps zur Laufzeit auf MSIX-Frameworkpakete verweisen und verwenden.

Frameworkpakete und das Paketdiagramm

MSIX ist ein Paketformat, das eine moderne Paket- und Bereitstellungsumgebung bietet. Außerdem bietet sie eine saubere und vertrauenswürdige Möglichkeit zum Packen von weiterverteilbaren Bibliotheken, Inhalten und Komponenten über MSIX-Frameworkpakete. Ein MSIX-Frameworkpaket ermöglicht verpackten Apps den Zugriff auf Komponenten über eine einzige freigegebene Quelle auf dem Gerät des Benutzers, anstatt sie in das App-Paket zu bündeln. Allgemeine Framework-Pakete umfassen das Windows App SDK (einschließlich WinUI3), WinUI2, VCLibs und die DirectX-Runtime.

Ab Windows 8 und weiter über Windows 10 und Windows 11 verfügt jeder Prozess über ein Paketdiagramm , das die Liste aller für die App verfügbaren Pakete bereitstellt, einschließlich Framework, Ressource, Optional und Hauptpakete. Dieses Diagramm ermöglicht der App das Laden von DLLs, Inhalten und Laufzeitklassendeklarationen, die von einem referenzierten Paket bereitgestellt werden. In der Vergangenheit war dieser Graph zur Prozesserstellungszeit festgelegt, und es gab keine Möglichkeit, ihn zur Laufzeit zu ändern.

  • Bei verpackten Apps wurde das Diagramm basierend auf den Paketabhängigkeiten initialisiert, die im PackageDependency-Element im App-Paketmanifest deklariert wurden. Beim Erstellen einer verpackten App wurde dies in der Regel während des Erstellungsprozesses basierend auf Ihren Projektbezügen und Abhängigkeiten durchgeführt.
  • Bei entpackten Apps war das Paketdiagramm leer und konnte nicht geändert werden. Daher waren entpackte Apps auf die standardmäßige DLL-Suchreihenfolge beschränkt und konnten nicht auf Frameworkpakete zugreifen.

Diese Einschränkung des statischen Paketdiagramms wird mit der Einführung der dynamischen Abhängigkeiten sowohl im Windows App SDK als auch in Windows 11 aufgehoben. Entwickler können dynamische Abhängigkeiten verwenden, um zur Laufzeit von ihren Apps auf MSIX-Frameworkpakete zu verweisen und sie zu verwenden. Dynamische Abhängigkeiten entfernen die Einschränkung des statischen Paketdiagramms aus Apps, und Entwickler können entscheiden, wie sie Frameworkpakete nutzen möchten.

Primäre Szenarien für dynamische Abhängigkeiten

Obwohl dynamische Abhängigkeiten es jeder App ermöglichen, zur Laufzeit eine Paketframeworkabhängigkeit hinzuzufügen, ist dieses Feature in erster Linie für Apps gedacht, die mit externem Speicherort oder entpackten Apps verpackt sind. Verpackte Apps können weiterhin statische Abhängigkeiten über das PackageDependency-Element im Paketmanifest hinzufügen.

Wartungsmodell für Frameworkpakete

Das Feature für dynamische Abhängigkeiten bewahrt die Integrität der Wartungspipeline für das Framework-Paket, auf das während der Laufzeit verwiesen und das dynamisch genutzt wird.

MSIX Framework-Pakete unterstützen die Wartung in einem parallelen Modell, d. h. jede Version wird in einem eigenen separaten Versionsordner installiert. Dadurch können Anwendungen weiterhin auf dem Laufenden bleiben, auch wenn eine neuere App eine neuere Version des Frameworkpakets installiert. Das Betriebssystem verfügt über Deinstallationslogik, wenn ältere Versionen eines bestimmten Frameworkpakets gelöscht werden sollen, basierend auf dem Vorhandensein von Installationszeitverweise und Laufzeitverweise für das Paket.

  • Wenn eine App installiert ist, kann sie einen Installationszeitverweis auf ein Framework-Paket erstellen. Diese Referenz informiert das Betriebssystem, dass die App von dem angegebenen Frameworkpaket abhängig ist, sodass das Betriebssystem das Frameworkpaket nicht deinstalliert, während die App installiert ist.
  • Wenn eine App APIs oder Inhalte in einem Frameworkpaket verwenden muss, kann sie dem Frameworkpaket einen Laufzeitverweis hinzufügen. Diese Referenz informiert das Betriebssystem darüber, dass das Frameworkpaket aktiv verwendet wird und alle Versionsupdates parallel behandelt werden können. Wenn eine neue Version des Frameworkpakets installiert ist, aber eine ausgeführte App eine ältere Version verwendet, kann das Betriebssystem die ältere Version erst entfernen, wenn alle Laufzeitverweise auf die ältere Version entfernt werden.

Zum Beispiel, in folgendem Szenario:

  • App A wird ausgeführt und verwendet Version 1.0.0.0 eines bestimmten Frameworkpakets.
  • App B ist installiert und hat eine Abhängigkeit von Version 1.0.0.1 desselben Frameworkpakets.

In diesem Szenario werden beide Versionen des Frameworkpakets installiert und von App A und App B verwendet. Wenn App A jedoch vom Benutzer geschlossen und dann neu gestartet wird, übernimmt sie die neuere Version 1.0.0.1 des Frameworkpakets. Zu diesem Zeitpunkt ist die Laufzeitreferenzanforderung für Version 1.0.0.0 des Frameworkpakets nicht mehr gültig, und das Betriebssystem kann die Version 1.0.0.0 sicher entfernen. Wenn App A und App B vom Benutzer deinstalliert werden, ist die Installationszeitreferenzanforderung nicht mehr gültig und es ist sicher, dass das Betriebssystem das Frameworkpaket vollständig entfernt.

Bei verpackten Apps, die das PackageDependency-Element verwenden, um statische Verweise auf Frameworkpakete anzugeben, werden die Installationszeitverweise für Frameworkpakete vom Betriebssystem nachverfolgt, wenn die App installiert oder deinstalliert wird. Für Laufzeitverweise, die mithilfe der Funktion für dynamische Abhängigkeiten verwaltet werden, erkennt das Betriebssystem, wann eine verpackte App ausgeführt wird, und verhindert, dass die in Gebrauch befindlichen Framework-Pakete entfernt werden, wenn ein neueres verfügbar ist.