Panoramica della pubblicazione di applicazioni .NET

Le applicazioni create con .NET possono essere pubblicate in due modalità diverse e la modalità influiscono sulla modalità di esecuzione dell'app da parte di un utente.

La pubblicazione dell'app come autonoma produce un'applicazione che include il runtime e le librerie .NET, nonché l'applicazione e le relative dipendenze. Gli utenti dell'applicazione possono eseguirla in un computer in cui non è installato il Runtime .NET.

La pubblicazione dell'app come dipendente dal Framework produce un'applicazione che include solo l'applicazione stessa e le relative dipendenze. Gli utenti dell'applicazione devono installare separatamente il Runtime .NET.

Per impostazione predefinita, entrambe le modalità di pubblicazione producono un eseguibile specifico della piattaforma. Le applicazioni dipendenti dal Framework possono essere create senza un eseguibile e queste applicazioni sono multipiattaforma.

Quando viene prodotto un file eseguibile, è possibile specificare la piattaforma di destinazione con un identificatore di runtime (RID). Per ulteriori informazioni su rid, vedere Catalogo RID .NET.

La tabella seguente descrive i comandi usati per pubblicare un'app come dipendente dal Framework o autonomo, per ogni versione dell'SDK:

Tipo SDK 2.1 SDK 3,1 SDK 5,0 Comando
eseguibile dipendente dal Framework per la piattaforma corrente. ✔️ ✔️ dotnet publish
eseguibile dipendente dal Framework per una piattaforma specifica. ✔️ ✔️ dotnet publish -r <RID> --self-contained false
binario multipiattaforma dipendente dal Framework. ✔️ ✔️ ✔️ dotnet publish
eseguibile indipendente. ✔️ ✔️ ✔️ dotnet publish -r <RID>

Per ulteriori informazioni, vedere comando .net dotNet Publish.

Produrre un eseguibile

Gli eseguibili non sono multipiattaforma. Sono specifici di un sistema operativo e di un'architettura della CPU. Quando si pubblica l'app e si crea un eseguibile, è possibile pubblicare l'app come dipendente autonomo o dal Framework. La pubblicazione di un'app come indipendente include il Runtime .NET con l'app e gli utenti dell'app non devono preoccuparsi di installare .NET prima di eseguire l'app. Le app pubblicate come dipendenti dal Framework non includono il runtime e le librerie .NET; sono incluse solo l'app e le dipendenze di terze parti.

I comandi seguenti producono un eseguibile:

Tipo SDK 2.1 SDK 3,1 SDK 5,0 Comando
eseguibile dipendente dal Framework per la piattaforma corrente. ✔️ ✔️ dotnet publish
eseguibile dipendente dal Framework per una piattaforma specifica. ✔️ ✔️ dotnet publish -r <RID> --self-contained false
eseguibile indipendente. ✔️ ✔️ ✔️ dotnet publish -r <RID>

Produrre un file binario multipiattaforma

I file binari multipiattaforma vengono creati quando si pubblica l'app come dipendente dal Framework, sotto forma di file dll . Il nome del file dll viene eseguito dopo il progetto. Se, ad esempio, si dispone di un'app denominata word_reader, viene creato un file denominato word_reader.dll . Le app pubblicate in questo modo vengono eseguite con il dotnet <filename.dll> comando e possono essere eseguite su qualsiasi piattaforma.

I file binari multipiattaforma possono essere eseguiti in qualsiasi sistema operativo, purché il Runtime .NET di destinazione sia già installato. Se il Runtime .NET di destinazione non è installato, l'app può essere eseguita usando un runtime più recente se l'app è configurata per il rollforward. Per altre informazioni, vedere rollforward delle app dipendenti dal Framework.

Il comando seguente genera un file binario multipiattaforma:

Tipo SDK 2.1 SDK 3. x SDK 5,0 Comando
binario multipiattaforma dipendente dal Framework. ✔️ ✔️ ✔️ dotnet publish

Pubblicazione dipendente dal Framework

Le app pubblicate come dipendenti dal Framework sono multipiattaforma e non includono il Runtime .NET. L'utente dell'app è necessario per installare il Runtime .NET.

La pubblicazione di un'app come dipendente dal Framework produce un file binario multipiattaforma come file dll e un file eseguibile specifico della piattaforma destinato alla piattaforma corrente. La dll è multipiattaforma mentre l'eseguibile non lo è. Se ad esempio si pubblica un'app denominata word_reader e le finestre di destinazione, viene creato un file eseguibile word_reader.exe insieme a word_reader.dll. Quando la destinazione è Linux o macOS, viene creato un file eseguibile word_reader insieme al word_reader.dll. Per ulteriori informazioni su rid, vedere Catalogo RID .NET.

Importante

.NET SDK 2,1 non produce eseguibili specifici della piattaforma quando si pubblica un'app dipendente dal Framework.

Il file binario multipiattaforma dell'app può essere eseguito con il dotnet <filename.dll> comando e può essere eseguito su qualsiasi piattaforma. Se l'app usa un pacchetto NuGet con implementazioni specifiche della piattaforma, le dipendenze di tutte le piattaforme vengono copiate nella cartella di pubblicazione insieme all'app.

È possibile creare un eseguibile per una piattaforma specifica passando i -r <RID> --self-contained false parametri al dotnet publish comando. Quando il -r parametro viene omesso, viene creato un eseguibile per la piattaforma corrente. Tutti i pacchetti NuGet con dipendenze specifiche della piattaforma per la piattaforma di destinazione vengono copiati nella cartella di pubblicazione. Se non è necessario un eseguibile specifico di platfrom, è possibile specificare <UseAppHost>False</UseAppHost> nel file di progetto. Per altre informazioni, vedere riferimenti a MSBuild per progetti .NET SDK.

Vantaggi

  • Distribuzione di piccole dimensioni
    Verranno distribuite solo l'app e le relative dipendenze. Il Runtime .NET e le librerie vengono installate dall'utente e tutte le app condividono il Runtime.

  • Multipiattaforma
    L'app e qualsiasi. La libreria basata su rete viene eseguita in altri sistemi operativi. Non è necessario definire una piattaforma di destinazione per l'app. Per informazioni sul formato di file .NET, vedere formato di file di assembly .NET.

  • Usa il runtime con patch più recente
    L'app usa il runtime più recente (all'interno della famiglia di .NET principale-secondaria di destinazione) installato nel sistema di destinazione. Ciò significa che l'app usa automaticamente la versione più recente con patch del runtime .NET. Questo comportamento predefinito può essere sottoposto a override. Per altre informazioni, vedere rollforward delle app dipendenti dal Framework.

Svantaggi

  • Richiede la pre-installazione del runtime
    L'app può essere eseguita solo se la versione di .NET a cui è destinata l'app è già installata nel sistema host. È possibile configurare il comportamento di rollforward per l'app in modo che sia necessaria una versione specifica di .NET o consentire una versione più recente di .NET. Per altre informazioni, vedere rollforward delle app dipendenti dal Framework.

  • .NET può cambiare
    È possibile che le librerie e il Runtime .NET siano aggiornati nel computer in cui viene eseguita l'app. In rari casi, questo potrebbe modificare il comportamento dell'app se si usano le librerie .NET, eseguite dalla maggior parte delle app. È possibile configurare il modo in cui l'app usa le versioni più recenti di .NET. Per altre informazioni, vedere rollforward delle app dipendenti dal Framework.

Gli svantaggi seguenti si applicano solo a .NET Core 2,1 SDK.

  • Usare il dotnet comando per avviare l'app
    Per avviare l'app, gli utenti devono eseguire il dotnet <filename.dll> comando. .NET Core 2,1 SDK non produce eseguibili specifici della piattaforma per le app pubblicate dal Framework.

Esempio

Pubblicare un'app dipendente dal framework multipiattaforma. Un eseguibile destinato alla piattaforma corrente viene creato insieme al file dll .

dotnet publish

Pubblicare un'app dipendente dal framework multipiattaforma. Insieme al file dll viene creato un eseguibile Linux a 64 bit. Questo comando non funziona con .NET Core SDK 2,1.

dotnet publish -r linux-x64 --self-contained false

Pubblicazione indipendente

La pubblicazione dell'app come indipendente produce un eseguibile specifico della piattaforma. La cartella di pubblicazione di output contiene tutti i componenti dell'app, incluse le librerie .NET e il runtime di destinazione. L'app è isolata dalle altre app .NET e non usa un runtime condiviso installato localmente. L'utente dell'app non è necessario per scaricare e installare .NET.

Il file binario eseguibile viene prodotto per la piattaforma di destinazione specificata. Se, ad esempio, si dispone di un'app denominata word_reader e si pubblica un eseguibile autonomo per Windows, viene creato un file di word_reader.exe . Pubblicazione per Linux o macOS, viene creato un file di word_reader . La piattaforma e l'architettura di destinazione vengono specificate con il -r <RID> parametro per il dotnet publish comando. Per ulteriori informazioni su rid, vedere Catalogo RID .NET.

Se l'app ha dipendenze specifiche della piattaforma, ad esempio un pacchetto NuGet contenente dipendenze specifiche della piattaforma, queste vengono copiate nella cartella publish insieme all'app.

Vantaggi

  • Controllare la versione di .NET
    È possibile controllare la versione di .NET distribuita con l'app.

  • Targeting specifico della piattaforma
    Poiché è necessario pubblicare l'app per ogni piattaforma, si sa dove viene eseguita l'app. Se .NET introduce una nuova piattaforma, gli utenti non possono eseguire l'app su tale piattaforma finché non viene rilasciata una versione destinata alla piattaforma. È possibile testare l'app per i problemi di compatibilità prima che gli utenti eseguano l'app nella nuova piattaforma.

Svantaggi

  • Distribuzioni di dimensioni maggiori
    Poiché l'app include il Runtime .NET e tutte le dipendenze dell'app, le dimensioni del download e lo spazio su disco rigido necessario sono maggiori di una versione dipendente dal Framework .

    Suggerimento

    È possibile ridurre le dimensioni della distribuzione nei sistemi Linux di circa 28 MB usando la modalità invariante per la globalizzazionedi .NET. Questa operazione impone all'app di trattare tutte le impostazioni cultura come la lingua inglese.

    Suggerimento

    È disponibile una funzionalità Trim di anteprima che consente di ridurre ulteriormente le dimensioni della distribuzione.

  • Più difficile aggiornare la versione di .NET
    Il Runtime .NET (distribuito con l'app) può essere aggiornato solo rilasciando una nuova versione dell'app. Tuttavia, .NET aggiornerà le patch di sicurezza critiche in base alle esigenze per la libreria Framework nel computer in cui viene eseguita l'app. L'utente è responsabile della convalida end-to-end per questo scenario di patch di protezione.

Esempio

Pubblicare un'app indipendente. Viene creato un file eseguibile macOS a 64 bit.

dotnet publish -r osx-x64

Pubblicare un'app indipendente. Viene creato un file eseguibile di Windows a 64 bit.

dotnet publish -r win-x64

Pubblicare con immagini ReadyToRun

La pubblicazione con le immagini ReadyToRun consentirà di migliorare il tempo di avvio dell'applicazione, con il conseguente aumento delle dimensioni dell'applicazione. Per pubblicare con ReadyToRun, vedere ReadyToRun per altre informazioni.

Vantaggi

  • Tempo di avvio migliorato
    L'applicazione determinerà meno tempo per l'esecuzione del JIT.

Svantaggi

  • Dimensioni maggiori
    Il disco dell'applicazione sarà maggiore.

Esempio

Pubblicare un'app autonoma e ReadyToRun. Viene creato un file eseguibile macOS a 64 bit.

dotnet publish -c Release -r osx-x64 -p:PublishReadyToRun=true

Pubblicare un'app autonoma e ReadyToRun. Viene creato un file eseguibile di Windows a 64 bit.

dotnet publish -c Release -r win-x64 -p:PublishReadyToRun=true

Vedi anche