Pubblicare un'app .NET MAUI in pacchetto per Windows con l'interfaccia della riga di comando
Quando si distribuisce l'app .NET Multi-platform App UI (.NET MAUI) per Windows, è possibile pubblicare l'app e le relative dipendenze in una cartella per la distribuzione in un altro sistema. È anche possibile creare un pacchetto dell'app in un pacchetto MSIX, che offre numerosi vantaggi per gli utenti che installano l'app. Per altre informazioni sui vantaggi di MSIX, vedere Che cos'è MSIX?
Creare un certificato di firma
È necessario usare un certificato di firma per l'uso nella pubblicazione dell'app. Questo certificato viene usato per firmare il pacchetto MSIX. La procedura seguente illustra come creare e installare un certificato autofirmato con PowerShell:
Nota
Quando si crea e si usa un certificato autofirmato, solo gli utenti che installano e considerano attendibile il certificato possono eseguire l'app. Questo è facile da implementare per i test, ma potrebbe impedire ad altri utenti di installare l'app. Quando si è pronti per pubblicare l'app, è consigliabile usare un certificato emesso da un'origine attendibile. Questo sistema di attendibilità centralizzata consente di garantire che l'ecosistema di app abbia livelli di verifica per proteggere gli utenti da attori malintenzionati.
Aprire un terminale di PowerShell e passare alla directory con il progetto.
Usare il
New-SelfSignedCertificate
comando per generare un certificato autofirmato.Il
<PublisherName>
valore viene visualizzato all'utente quando installa l'app, specificare il proprio valore e omettere i< >
caratteri. È possibile impostare ilFriendlyName
parametro su qualsiasi stringa di testo desiderata.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}")
Usare il comando di PowerShell seguente per eseguire una query sull'archivio certificati per il certificato creato:
Get-ChildItem "Cert:\CurrentUser\My" | Format-Table Thumbprint, Subject, FriendlyName
Verrà visualizzata un output simile al seguente:
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
L'identificazione personale del certificato verrà usata in un secondo momento, quindi copiarla negli Appunti. Si tratta del valore identificazione personale la cui voce corrisponde a Subject e FriendlyName del certificato.
Per altre informazioni, vedere Creare un certificato per la firma del pacchetto.
Configurare le impostazioni di compilazione del progetto
Il file di progetto è un buon posto per inserire impostazioni di compilazione specifiche di Windows. Potrebbe non essere necessario inserire alcune impostazioni nel file di progetto, ad esempio le password. Le impostazioni descritte in questa sezione possono essere passate dalla riga di comando con il -p:name=value
formato . Se l'impostazione è già definita nel file di progetto, un'impostazione passata nella riga di comando sostituisce l'impostazione del progetto.
Aggiungere il nodo seguente <PropertyGroup>
al file di progetto. Questo gruppo di proprietà viene elaborato solo quando il framework di destinazione è Windows e la configurazione è impostata su Release
. Questa sezione di configurazione viene eseguita ogni volta che una compilazione o una pubblicazione in Release
modalità .
<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>
Sostituire il valore della <PackageCertificateThumbprint>
proprietà con l'identificazione personale del certificato generata in precedenza. In alternativa, è possibile rimuovere questa impostazione dal file di progetto e specificarla nella riga di comando. Ad esempio: -p:PackageCertificateThumbprint=A10612AF095FD8F8255F4C6691D88F79EF2B135E
.
Il secondo <PropertyGroup>
nell'esempio è necessario per risolvere un bug in Windows SDK. Per altre informazioni sul bug, vedere Problema di WindowsAppSDK #3337.
Pagina
Per pubblicare l'app, aprire il prompt dei comandi per gli sviluppatori per il terminale VS 2022 e passare alla cartella per il progetto di app MAUI .NET. Eseguire il dotnet publish
comando specificando i parametri seguenti:
Parametro | Valore |
---|---|
-f |
Framework di destinazione, ovvero net8.0-windows{version} . Questo valore è un TFM di Windows, ad esempio net8.0-windows10.0.19041.0 . Assicurarsi che questo valore sia identico al valore nel <TargetFrameworks> nodo nel file con estensione csproj . |
-c |
Configurazione di compilazione, ovvero Release . |
-p:RuntimeIdentifierOverride=win10-x64 - oppure - -p:RuntimeIdentifierOverride=win10-x86 |
Evita il bug dettagliato in WindowsAppSDK Problema 3337. Scegliere la -x64 versione o -x86 del parametro in base alla piattaforma di destinazione. |
Avviso
Se si tenta di pubblicare una soluzione MAUI .NET, il dotnet publish
comando tenta di pubblicare ogni progetto nella soluzione singolarmente, causando problemi quando sono stati aggiunti altri tipi di progetto alla soluzione. Di conseguenza, il dotnet publish
comando deve essere limitato al progetto di app .NET MAUI.
Ad esempio:
dotnet publish -f net8.0-windows10.0.19041.0 -c Release -p:RuntimeIdentifierOverride=win10-x64
Nota
In .NET 8 il dotnet publish
comando usa per impostazione predefinita la Release
configurazione. Di conseguenza, la configurazione della compilazione può essere omessa dalla riga di comando.
Pubblicazione di compilazioni e pacchetti dell'app, copiando il pacchetto firmato nella cartella bin\Release\net8.0-windows10.0.19041.0\win10-x64\AppPackages\<nomeapp>. <appname> è una cartella denominata sia dal progetto che dalla versione. In questa cartella è presente un file msix ed è il pacchetto dell'app.
Per altre informazioni sul dotnet publish
comando, vedere dotnet publish.
Installazione dell'app
Per installare l'app, deve essere firmata con un certificato già attendibile. In caso contrario, Windows non consente di installare l'app. Verrà visualizzata una finestra di dialogo simile alla seguente, con il pulsante Installa disabilitato:
Si noti che nell'immagine precedente il server di pubblicazione era "sconosciuto".
Per considerare attendibile il certificato del pacchetto dell'app, seguire questa procedura:
Fare clic con il pulsante destro del mouse sul file con estensione msix e scegliere Proprietà.
Selezionare la scheda Firme digitali.
Scegliere il certificato e quindi premere Dettagli.
Selezionare Visualizza certificato.
Selezionare Installa certificato....
Scegliere Computer locale e quindi avanti.
Se viene richiesto dal controllo dell'account utente di consentire all'app di apportare modifiche al dispositivo? selezionare Sì.
Nella finestra Importazione guidata certificati selezionare Inserisci tutti i certificati nell'archivio seguente.
Selezionare Sfoglia e quindi scegliere l'archivio Persone attendibile. Selezionare OK per chiudere la finestra di dialogo.
Selezionare Avanti e quindi Fine. Verrà visualizzata una finestra di dialogo che indica che l'importazione è riuscita.
Selezionare OK in qualsiasi finestra aperta come parte di questo processo per chiuderli tutti.
Provare ora ad aprire di nuovo il file del pacchetto per installare l'app. Verrà visualizzata una finestra di dialogo simile alla seguente, con il server di pubblicazione visualizzato correttamente:
Selezionare il pulsante Installa se si vuole installare l'app.
Limitazioni correnti
Nell'elenco seguente vengono descritte le limitazioni correnti relative alla pubblicazione e alla creazione di pacchetti:
- L'app pubblicata non funziona se si tenta di eseguirla direttamente con il file eseguibile dalla cartella di pubblicazione.
- Il modo per eseguire l'app consiste nel prima installarla tramite il file MSIX in pacchetto.