Udostępnij za pośrednictwem


Publikowanie rozpakowanej aplikacji .NET MAUI dla systemu Windows przy użyciu interfejsu wiersza polecenia

Podczas dystrybucji aplikacji interfejsu użytkownika aplikacji wieloplatformowej platformy .NET (.NET MAUI) dla systemu Windows można opublikować aplikację i jej zależności w folderze na potrzeby wdrożenia w innym systemie.

Konfigurowanie ustawień kompilacji projektu

Dodaj następujący <PropertyGroup> węzeł do pliku projektu. Ta grupa właściwości jest przetwarzana tylko wtedy, gdy platforma docelowa to Windows, a konfiguracja jest ustawiona na Releasewartość . Ta sekcja konfiguracji jest uruchamiana za każdym razem, gdy kompilacja lub publikowanie w Release trybie.

<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows' and '$(RuntimeIdentifierOverride)' != ''">
    <RuntimeIdentifier>$(RuntimeIdentifierOverride)</RuntimeIdentifier>
</PropertyGroup>

W <PropertyGroup> tym przykładzie wymagane jest obejście usterki w zestawie SDK aplikacji systemu Windows. Aby uzyskać więcej informacji na temat usterki, zobacz Problem z zestawem WindowsAppSDK #3337.

Publikowanie

Aby opublikować aplikację, otwórz terminal developer command prompt for VS 2022 (Wiersz polecenia dla deweloperów dla programu VS 2022 ) i przejdź do folderu projektu aplikacji .NET MAUI. dotnet publish Uruchom polecenie , podając następujące parametry:

Parametr Wartość
-f Struktura docelowa, czyli net8.0-windows{version}. Ta wartość jest programem TFM systemu Windows, takim jak net8.0-windows10.0.19041.0. Upewnij się, że ta wartość jest identyczna z wartością <TargetFrameworks> w węźle w pliku csproj .
-c Konfiguracja kompilacji, czyli Release.
-p:RuntimeIdentifierOverride=win10-x64
- lub -
-p:RuntimeIdentifierOverride=win10-x86
Unika usterki szczegółowo opisanej w temacie Problem z zestawem WindowsAppSDK #3337. -x64 Wybierz wersję lub -x86 parametru na podstawie platformy docelowej.
-p:WindowsPackageType Typ pakietu, który jest None przeznaczony dla aplikacji rozpakowanych.
-p:WindowsAppSDKSelfContained Tryb wdrażania aplikacji, który może być zależny od struktury lub samodzielny. Ta wartość powinna dotyczyć true aplikacji samodzielnie zawartych. Aby uzyskać więcej informacji na temat aplikacji zależnych od platformy i aplikacji samodzielnie, zobacz Omówienie wdrażania zestawu SDK aplikacji systemu Windows.

Ostrzeżenie

Próba opublikowania rozwiązania MAUI platformy .NET spowoduje dotnet publish , że polecenie podejmie próbę opublikowania każdego projektu w rozwiązaniu osobno, co może powodować problemy podczas dodawania innych typów projektów do rozwiązania. W związku z dotnet publish tym polecenie powinno być ograniczone do projektu aplikacji .NET MAUI.

Na przykład:

dotnet publish -f net8.0-windows10.0.19041.0 -c Release -p:RuntimeIdentifierOverride=win10-x64 -p:WindowsPackageType=None

Uwaga

W programie .NET 8 dotnet publish polecenie jest domyślnie ustawione na konfigurację Release . W związku z tym konfigurację kompilacji można pominąć z wiersza polecenia.

Publikowanie kompiluje aplikację, kopiując plik wykonywalny do folderu bin\Release\net8.0-windows10.0.19041.0\win10-x64\publish . W tym folderze znajduje się plik exe i to jest skompilowana aplikacja. Tę aplikację można uruchomić lub cały folder można skopiować na inną maszynę i uruchomić tam.

Ważną różnicą od spakowanej aplikacji jest to, że nie będzie to obejmować środowiska uruchomieniowego platformy .NET w folderze. Oznacza to, że aplikacja będzie wymagać, aby środowisko uruchomieniowe platformy .NET było najpierw zainstalowane na maszynach, które ostatecznie uruchomią aplikację. Aby upewnić się, że aplikacja zawiera również wszystkie składniki środowiska uruchomieniowego, -p:WindowsAppSDKSelfContained argument można podać podczas publikowania. Na przykład:

dotnet publish -f net8.0-windows10.0.19041.0 -c Release -p:RuntimeIdentifierOverride=win10-x64 -p:WindowsPackageType=None -p:WindowsAppSDKSelfContained=true

Aby uzyskać więcej informacji o poleceniu dotnet publish , zobacz dotnet publish (Publikowanie dotnet).