Typy pakietów MSIX

MsiX obsługuje cztery typy pakietów: Main, Framework, Resource i Optional. MSIX obsługuje również pakiety Bundle, które są kontenerami dystrybucyjnymi dla co najmniej jednego pakietu MSIX.

Typ pakietu definiuje kombinację zachowań wdrażania, zależności, wykonywania i serwisowania. Niektóre zachowania są związane z typem, podczas gdy deklaracja manifestu może zastąpić inne wartości domyślne.

Typ Cel podstawowy Wskaźnik manifestu lub tożsamości
Główne Pakiet podstawowy dla aplikacji Brak deklaracji dla innego typu pakietu
Framework Udostępnione biblioteki, składniki lub zawartość środowiska uruchomieniowego <Framework>true</Framework>
Resource Zasoby specyficzne dla języka, skali lub kwalifikatora <ResourcePackage>true</ResourcePackage>
Fakultatywny Dodatkowa zawartość skojarzona z jednym pakietem głównym <uap3:MainPackageDependency>
Pakiet Kontener dystrybucji dla wielu pakietów MSIX Manifest pakietu i wartość ~

Główne pakiety

Pakiet Main reprezentuje pakiet podstawowy dla aplikacji. Może deklarować aplikacje, możliwości, zależności, rozszerzenia i serwery uruchamiane poza procesem.

Manifest nie zawiera jawnego znacznika Main-package. Pakiet jest pakietem głównym, gdy nie deklaruje się jako inny typ pakietu.

Pakiety struktury

Pakiet frameworka udostępnia udostępnione biblioteki, składniki, zasoby lub inną zawartość środowiska uruchomieniowego. Inne pakiety lub procesy dodają pakiet framework do grafu pakietów przed załadowaniem jego zawartości.

Pakiety frameworka obsługują wersje instalowane równolegle, dzięki czemu aplikacje mogą niezależnie przenosić się do nowszych wersji. Pakiet deklaruje ten typ, ustawiając element manifestu Framework na true.

Aby uzyskać informacje o korzystaniu z pakietów Framework w procesach pakietowych i niepakietowych, zobacz Używanie dynamicznego interfejsu API zależności.

Pakiety zasobów

Pakiet zasobów oddziela zasoby specyficzne dla języka, skali wyświetlania lub innych kwalifikatorów od pakietu głównego lub opcjonalnego. Windows instaluje tylko pakiety zasobów, które mają zastosowanie do urządzenia lub użytkownika.

Pakietów zasobów nie można domyślnie uruchamiać. Pakiet może zastąpić tę wartość domyślną za pomocą uap6:AllowExecution. Pakiet deklaruje typ zasobu, ustawiając wartość ResourcePackage na true.

Pakiety opcjonalne

Opcjonalny pakiet zawiera dodatkową zawartość dla określonego pakietu głównego. Na przykład aplikacja może umieszczać mapy do pobrania, zasoby o wysokiej rozdzielczości lub opcjonalne narzędzia w oddzielnych pakietach.

W przeciwieństwie do pakietu framework opcjonalny pakiet jest skojarzony z jedną rodziną pakietu Main. Deklaruje ona relację za pośrednictwem elementu uap3:MainPackageDependency.

Aby uzyskać informacje o wymaganiach dotyczących tworzenia i powiązanych zestawów, zobacz Opcjonalne pakiety i tworzenie powiązanych zestawów.

Pakiety zbiorcze

Pakiet MSIX (.msixbundle) zawiera co najmniej jeden pakiet MSIX. Pakiet udostępnia jeden artefakt dystrybucji, umożliwiając Windows instalowanie tylko pakietów architektury i zasobów, które mają zastosowanie do urządzenia docelowego.

Wszystkie pakiety w pakiecie zbiorczym należą do tej samej rodziny pakietów. Bundle jest kontenerem, a nie piątym wdrażalnym typem pakietu.

Identyfikowanie typów pakietów w kodzie

Klasa Windows.ApplicationModel.Package uwidacznia właściwości identyfikujące typ pakietu:

static string GetPackageType(Windows.ApplicationModel.Package package)
{
    if (package.IsBundle)
    {
        return "Bundle";
    }

    if (package.IsFramework)
    {
        return "Framework";
    }

    if (package.IsResourcePackage)
    {
        return "Resource";
    }

    if (package.IsOptional)
    {
        return "Optional";
    }

    return "Main";
}

Identyfikowanie typów pakietów za pomocą programu PowerShell

Domyślnie Get-AppxPackage zwraca pakiety Main i Framework. Użyj -PackageTypeFilter, aby uwzględnić inne typy:

Get-AppxPackage -PackageTypeFilter Main,Framework,Resource,Optional,Bundle |
    Select-Object Name, PackageFullName, IsFramework, IsResourcePackage, IsBundle

Obiekt wyjściowy nie udostępnia właściwości IsOptional. Użyj filtru, aby uwzględnić opcjonalne pakiety i sprawdzić ich manifest lub relację pakietu, gdy trzeba je odróżnić.