Condividi tramite


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.

  1. Aprire un terminale di PowerShell e passare alla directory con il progetto.

  2. 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 il FriendlyName 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}")
    
  3. 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
    
  4. 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:

Installing an untrusted app.

Si noti che nell'immagine precedente il server di pubblicazione era "sconosciuto".

Per considerare attendibile il certificato del pacchetto dell'app, seguire questa procedura:

  1. Fare clic con il pulsante destro del mouse sul file con estensione msix e scegliere Proprietà.

  2. Selezionare la scheda Firme digitali.

  3. Scegliere il certificato e quindi premere Dettagli.

    Properties pane of an MSIX file with the digital signatures tab selected.

  4. Selezionare Visualizza certificato.

  5. Selezionare Installa certificato....

  6. Scegliere Computer locale e quindi avanti.

    Se viene richiesto dal controllo dell'account utente di consentire all'app di apportare modifiche al dispositivo? selezionare .

  7. Nella finestra Importazione guidata certificati selezionare Inserisci tutti i certificati nell'archivio seguente.

  8. Selezionare Sfoglia e quindi scegliere l'archivio Persone attendibile. Selezionare OK per chiudere la finestra di dialogo.

    Certificate import wizard window is shown while selecting the Trusted People store.

  9. Selezionare Avanti e quindi Fine. Verrà visualizzata una finestra di dialogo che indica che l'importazione è riuscita.

    Certificate import wizard window with a successful import message.

  10. 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:

Installing a trusted app.

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.