Veröffentlichen einer verpackten .NET MAUI-App für Windows mit der CLI
Wenn Sie Ihre .NET Multi-Platform App UI(.NET MAUI)-App für Windows verteilen, können Sie die App und deren Abhängigkeiten in einem Ordner für die Bereitstellung in einem anderen System veröffentlichen. Sie können die App auch in ein MSIX-Paket packen, was für die Benutzer*innen, die Ihre App installieren, zahlreiche Vorteile hat. Weitere Informationen zu den Vorteilen der Verwendung von MSIX für die Verpackung finden Sie unter Was ist MSIX?.
Erstellen eines Signaturzertifikats.
Sie müssen ein Signaturzertifikat für die Veröffentlichung Ihrer App verwenden. Dieses Zertifikat wird verwendet, um das MSIX-Paket zu signieren. In den folgenden Schritten wird das Erstellen eines selbstsignierten Stammzertifikats mit PowerShell unter Windows 10 beschrieben.
Hinweis
Wenn Sie ein selbstsigniertes Zertifikat erstellen und verwenden, können nur Benutzer*innen, die Ihr Zertifikat installieren und ihm vertrauen, Ihre App ausführen. Dies ist zu Testzwecken einfach zu implementieren, kann aber verhindern, dass weitere Benutzer Ihre App installieren. Wenn Sie bereit sind, Ihre App zu veröffentlichen, empfehlen wir Ihnen, ein von einer vertrauenswürdigen Quelle ausgestelltes Zertifikat zu verwenden. Dieses System des zentralen Vertrauens trägt dazu bei, dass das App-Ökosystem über Verifizierungsebenen verfügt, um die Nutzer vor böswilligen Akteuren zu schützen.
Öffnen Sie ein PowerShell-Terminal und navigieren Sie zu dem Verzeichnis mit Ihrem Projekt.
Verwenden Sie den Befehl
New-SelfSignedCertificate
, um ein selbstsigniertes Zertifikat zu erzeugen.Der
<PublisherName>
-Wert wird dem/der Benutzer*in angezeigt, wenn er/sie Ihre App installiert. Geben Sie Ihren eigenen Wert ein und lassen Sie die< >
-Zeichen weg. Sie können den ParameterFriendlyName
auf eine beliebige Zeichenfolge setzen, die Sie wünschen.New-SelfSignedCertificate -Type Custom ` -Subject "CN=<PublisherName>" ` -KeyUsage DigitalSignature ` -FriendlyName "My temp dev cert" ` -CertStoreLocation "Cert:\CurrentUser\My" ` -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}")
Verwenden Sie den folgenden PowerShell-Befehl, um den Zertifikatspeicher nach dem erstellten Zertifikat abzufragen:
Get-ChildItem "Cert:\CurrentUser\My" | Format-Table Thumbprint, Subject, FriendlyName
Die Ergebnisse sollten in etwa wie in der folgenden Ausgabe aussehen:
Thumbprint Subject FriendlyName ---------- ------- ------------ DE8B962E7BF797CB48CCF66C8BCACE65C6585E2F CN=1f23fa36-2a2f-475e-a69e-3a14fe56ed4 A6CA34FD0BA6B439787391F51C87B1AD0C9E7FAE CN=someone@microsoft.com 94D93DBC97D4F7E4364A215F15C6ACFEFC71E569 CN=localhost ASP.NET Core HTTPS development certificate F14211566DACE867DA0BF9C2F9C47C01E3CF1D9B CN=john 568027317BE8EE5E6AACDE5079D2DE76EC46EB88 CN=e1f823e2-4674-03d2-aaad-21ab23ad84ae DC602EE83C95FEDF280835980E22306067EFCA96 CN=John Smith, OU=MSE, OU=Users, DC=com 07AD38F3B646F5AAC16F2F2570CAE40F4842BBE0 CN=Contoso My temp dev cert
Der Fingerabdruck Ihres Zertifikats wird später verwendet, kopieren Sie ihn also in Ihre Zwischenablage. Es ist der Wert Fingerabdruck, dessen Eintrag mit dem Betreff und FriendlyName Ihres Zertifikats übereinstimmt.
Weitere Informationen finden Sie unter Erstellen eines Zertifikats zum Signaturen von Paketen.
Konfigurieren Sie die Einstellungen für die Projekterstellung
Die Projektdatei ist ein guter Ort, um Windows-spezifische Build-Einstellungen zu speichern. Einige Einstellungen, wie etwa Kennwörter, möchten Sie vielleicht nicht in die Projektdatei aufnehmen. Die in diesem Abschnitt beschriebenen Einstellungen können in der Befehlszeile im Format -p:name=value
übergeben werden. Wenn die Einstellung bereits in der Projektdatei definiert ist, hat eine auf der Befehlszeile übergebene Einstellung Vorrang vor der Projekteinstellung.
Fügen Sie den folgenden <PropertyGroup>
-Knoten Ihrer Projektdatei hinzu. Diese Eigenschaftsgruppe wird nur verarbeitet, wenn das Ziel-Framework Windows ist und die Konfiguration auf Release
eingestellt ist. Dieser Konfigurationsabschnitt wird immer dann ausgeführt, wenn ein Build oder eine Veröffentlichung im Release
-Modus erfolgt.
<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows' and '$(Configuration)' == 'Release'">
<AppxPackageSigningEnabled>true</AppxPackageSigningEnabled>
<PackageCertificateThumbprint>A10612AF095FD8F8255F4C6691D88F79EF2B135E</PackageCertificateThumbprint>
</PropertyGroup>
<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows' and '$(RuntimeIdentifierOverride)' != ''">
<RuntimeIdentifier>$(RuntimeIdentifierOverride)</RuntimeIdentifier>
</PropertyGroup>
Ersetzen Sie den <PackageCertificateThumbprint>
-Eigenschaftswert durch den zuvor generierten Zertifikatfingerabdruck. Alternativ können Sie diese Einstellung auch aus der Projektdatei entfernen und in der Befehlszeile angeben. Beispiel: -p:PackageCertificateThumbprint=A10612AF095FD8F8255F4C6691D88F79EF2B135E
Das zweite <PropertyGroup>
im Beispiel ist erforderlich, um einen Fehler im Windows-SDK zu umgehen. Weitere Informationen zu diesem Fehler finden Sie unter WindowsAppSDK Issue #3337.
Veröffentlichen
Um Ihre App zu veröffentlichen, öffnen Sie die Entwickler-Eingabeaufforderung für VS 2022 und navigieren Sie zu dem Ordner für Ihr .NET MAUI-Appsprojekt. Führen Sie den Befehl dotnet publish
mit den folgenden Parametern aus:
Parameter | Wert |
---|---|
-f |
Das Zielframework ist net8.0-windows{version} . Dieser Wert ist ein Windows-TFM, wie etwa net8.0-windows10.0.19041.0 . Stellen Sie sicher, dass dieser Wert mit dem Wert im <TargetFrameworks> -Knoten in Ihrer .csproj-Datei identisch ist. |
-c |
Die Buildkonfiguration ist Release . |
-p:RuntimeIdentifierOverride=win10-x64 – oder – -p:RuntimeIdentifierOverride=win10-x86 |
Vermeidet den in WindowsAppSDK Issue #3337 beschriebenen Fehler. Wählen Sie je nach Zielplattform die -x64 - oder -x86 -Version des Parameters aus. |
Warnung
Der Versuch, eine .NET MAUI-Lösung zu veröffentlichen, führt dazu, dass der Befehl dotnet publish
versucht, jedes Projekt in der Lösung einzeln zu veröffentlichen, was zu Problemen führen kann, wenn Sie andere Projekttypen zu Ihrer Lösung hinzugefügt haben. Daher sollte der Befehl dotnet publish
auf Ihr .NET MAUI-Appsprojekt beschränkt sein.
Beispiel:
dotnet publish -f net8.0-windows10.0.19041.0 -c Release -p:RuntimeIdentifierOverride=win10-x64
Hinweis
In .NET 8 wird für den Befehl dotnet publish
standardmäßig die Konfiguration Release
verwendet. Daher kann die Buildkonfiguration von der Befehlszeile weggelassen werden.
Die Veröffentlichung erstellt und verpackt die App und kopiert das signierte Paket in den Ordner bin\Release\net8.0-windows10.0.19041.0\win10-x64\AppPackages\<Appsname>\. <Appsname> ist ein Ordner, der sowohl nach Ihrem Projekt als auch nach Ihrer Version benannt ist. In diesem Ordner gibt es eine msix-Datei, und das ist das Appspaket.
Weitere Informationen über den Befehl dotnet publish
finden Sie unter dotnet publish.
Installieren der App
Um die App zu installieren, muss sie mit einem Zertifikat signiert sein, dem Sie bereits vertrauen. Ist dies nicht der Fall, lässt Windows Sie die App nicht installieren. Es wird ein Dialogfeld ähnlich dem folgenden angezeigt, wobei die Schaltfläche Installieren deaktiviert ist:
Beachten Sie, dass im vorherigen Bild der Herausgeber „unbekannt“ war.
Führen Sie die folgenden Schritte aus, um dem Zertifikat des Appspakets zu vertrauen:
Klicken Sie mit der rechten Maustaste auf die Datei .msix und wählen Sie Eigenschaften aus.
Wählen Sie die Registerkarte Digitale Signaturen aus.
Wählen Sie das Zertifikat aus und drücken Sie auf Details.
Wählen Sie Zertifikat anzeigen aus.
Wählen Sie Zertifikat installieren … aus.
Wählen Sie Lokaler Rechner aus und wählen Sie anschließend Weiter aus.
Wenn Sie von der Benutzerkontensteuerung gefragt werden, Möchten Sie dieser App erlauben, Änderungen an Ihrem Gerät vorzunehmen?, wählen Sie Ja aus.
Wählen Sie im Fenster Zertifikatsimport-Assistent die Option Alle Zertifikate in den folgenden Speicher legen aus.
Wählen Sie Durchsuchen … aus, und wählen Sie anschließend den Speicher für Vertrauenswürdige Personen aus. Wählen Sie OK aus, um das Dialogfeld zu schließen.
Wählen Sie Weiter und anschließend Fertig stellen aus. Sie sollten ein Dialogfeld sehen, in dem steht: Der Import war erfolgreich.
Wählen Sie OK in jedem Fenster aus, das im Rahmen dieses Vorgangs geöffnet wurde, um alle zu schließen.
Versuchen Sie nun, die Paketdatei erneut zu öffnen, um die App zu installieren. Sie sollten ein ähnliches Dialogfeld wie das folgende sehen, in dem der Publisher korrekt angezeigt wird:
Wählen Sie die Schaltfläche Installieren aus, wenn Sie die App installieren möchten.
Aktuelle Einschränkungen
Die folgende Liste beschreibt die derzeitigen Einschränkungen bei der Veröffentlichung und Verpackung:
- Die veröffentlichte App funktioniert nicht, wenn Sie versuchen, sie direkt mit der ausführbaren Datei aus dem Veröffentlichungsordner auszuführen.
- Um die App zu starten, muss sie zunächst über die gepackte MSIX-Datei installiert werden.