Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come pubblicare l'applicazione .NET dalla riga di comando. .NET offre tre modi per pubblicare le applicazioni. La distribuzione dipendente dal framework genera un file con estensione dll multipiattaforma che usa il runtime di .NET installato in locale. L'eseguibile dipendente dal framework genera un file eseguibile specifico della piattaforma che usa il runtime di .NET installato in locale. L'eseguibile autonomo genera un file eseguibile specifico della piattaforma e include una copia locale del runtime di .NET.
Per una panoramica di queste modalità di pubblicazione, vedere Distribuzione di applicazioni .NET.
Cerchi un aiuto rapido per usare l'interfaccia della riga di comando (CLI)? la tabella seguente illustra alcuni esempi di pubblicazione di un'app. È possibile specificare il framework di destinazione con il parametro -f <TFM>
o modificando il file di progetto. Per altre informazioni, vedere Nozioni di base sulla pubblicazione.
Modalità di pubblicazione | Comando |
---|---|
Distribuzione dipendente dal framework | dotnet publish -c Release -p:UseAppHost=false |
File eseguibile dipendente dal framework | dotnet publish -c Release -r <RID> --self-contained false dotnet publish -c Release |
Distribuzione autonoma | dotnet publish -c Release -r <RID> --self-contained true |
Nota
- Il parametro
-c Release
non è obbligatorio. Viene fornito come promemoria per pubblicare la build Rilascio della tua app. - Nell’SDK .NET versione 3.1 o successiva, il file eseguibile dipendente dal framework è la modalità di pubblicazione predefinita durante l'esecuzione del comando
dotnet publish
di base.
Nozioni di base sulla pubblicazione
L'impostazione <TargetFramework>
del file di progetto specifica il framework di destinazione predefinito quando si pubblica l'app. È possibile modificare il framework di destinazione in qualsiasi moniker framework di destinazione (TFM) valido. Ad esempio, se il progetto usa <TargetFramework>net9.0</TargetFramework>
, viene creato un file binario destinato a .NET 9. Il TFM specificato in questa impostazione è il target predefinito usato dal comando dotnet publish
.
Se si desidera mirare a più di un framework, è possibile impostare l'impostazione <TargetFrameworks>
su più valori TFM, separati da punto e virgola. Quando si compila l'app, viene generata una build per ogni framework di destinazione. Tuttavia, quando si pubblica l'app, è necessario specificare il framework di destinazione con il comando dotnet publish -f <TFM>
.
La modalità BUILD-CONFIGURATION predefinita è Release a meno che non venga modificata con il -c
parametro .
La directory di output predefinita del comando dotnet publish
è ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/
. Ad esempio, dotnet publish -c Release -f net9.0
pubblica in ./bin/Release/net9.0/publish/
. Tuttavia, è possibile acconsentire esplicitamente a un percorso di output e a una struttura di cartelle semplificati per tutti gli output di compilazione. Per altre informazioni, vedere Layout di output degli artefatti.
Dipendenze native
Se l'app ha dipendenze native, è possibile che non venga eseguita in un sistema operativo diverso. Ad esempio, se l'app usa l'API Windows nativa, non verrà eseguita in macOS o Linux. Sarà necessario specificare un codice specifico della piattaforma e compilare un file eseguibile per ogni piattaforma.
Tenere presente anche che se una libreria a cui viene fatto riferimento include una dipendenza nativa, è possibile che l'app non venga eseguita in ogni piattaforma. Tuttavia, è possibile che un pacchetto NuGet cui viene fatto riferimento includa versioni specifiche della piattaforma per gestire automaticamente le dipendenze native necessarie.
Quando si distribuisce un'app con dipendenze native, potrebbe essere necessario usare l'opzione dotnet publish -r <RID>
per specificare la piattaforma di destinazione per cui eseguire la pubblicazione. Per un elenco degli identificatori di runtime, vedere Catalogo RID di .NET Core.
Altre informazioni sui file binari specifici della piattaforma sono disponibili nelle sezioni File eseguibili dipendenti dal framework e Distribuzioni autonome.
Esempio di app
È possibile usare le app seguenti per visualizzare i comandi di pubblicazione. L'app viene creata eseguendo i comandi seguenti nel terminale:
mkdir apptest1
cd apptest1
dotnet new console
dotnet add package Figgle
Il file Program.cs
o Program.vb
generato dal modello di console deve essere modificato come segue:
using System;
namespace apptest1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Figgle.FiggleFonts.Standard.Render("Hello, World!"));
}
}
}
Module Program
Sub Main(args As String())
Console.WriteLine(Figgle.FiggleFonts.Standard.Render("Hello, World!"))
End Sub
End Module
Quando si esegue l'app (dotnet run
), viene visualizzato l'output seguente:
_ _ _ _ __ __ _ _ _
| | | | ___| | | ___ \ \ / /__ _ __| | __| | |
| |_| |/ _ \ | |/ _ \ \ \ /\ / / _ \| '__| |/ _` | |
| _ | __/ | | (_) | \ V V / (_) | | | | (_| |_|
|_| |_|\___|_|_|\___( ) \_/\_/ \___/|_| |_|\__,_(_)
|/
Distribuzione dipendente dal framework
Quando pubblichi l'app come FDD, viene creato un file <PROJECT-NAME>.dll
nella cartella ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/
. Per eseguire l'app, passare alla cartella di output e usare il comando dotnet <PROJECT-NAME>.dll
.
L'app viene configurata con una versione specifica di .NET come destinazione. Il runtime .NET di destinazione deve trovarsi in qualsiasi computer in cui viene eseguita l'app. Ad esempio, se l'app è destinata a .NET 9, qualsiasi computer in cui viene eseguita l'app deve avere installato il runtime .NET 9. Come descritto nella sezione Nozioni di base sulla pubblicazione, è possibile modificare il file di progetto per cambiare il framework di destinazione predefinito o per impostare come destinazione più framework.
La pubblicazione di un FDD crea un'app che si aggiorna automaticamente all'ultima patch di sicurezza .NET disponibile nel sistema che esegue l'app. Per altre informazioni sul binding di versione in fase di compilazione, vedere Selezionare la versione di .NET da usare.
Modalità di pubblicazione | Comando |
---|---|
Distribuzione dipendente dal framework | dotnet publish -c Release -p:UseAppHost=false |
File eseguibile dipendente dal framework
Il file eseguibile dipendente dal framework (FDE) è la modalità predefinita per il comando di base dotnet publish
. Se la destinazione è il sistema operativo corrente, non è necessario specificare altri parametri.
In questa modalità viene creato un host eseguibile specifico della piattaforma per ospitare l'app multipiattaforma. Questa modalità è simile all'FDD, poiché l'FDD richiede un host sotto forma del comando dotnet
. Il nome del file eseguibile host varia a seconda della piattaforma ed è simile a <PROJECT-FILE>.exe
. È possibile eseguire questo eseguibile direttamente anziché utilizzare dotnet <PROJECT-FILE>.dll
, che è comunque un modo accettabile per eseguire l'app.
L'app viene configurata con una versione specifica di .NET come destinazione. Il runtime .NET di destinazione deve trovarsi in qualsiasi computer in cui viene eseguita l'app. Ad esempio, se l'app è destinata a .NET 9, qualsiasi computer in cui viene eseguita l'app deve avere installato il runtime .NET 9. Come descritto nella sezione Nozioni di base sulla pubblicazione, è possibile modificare il file di progetto per cambiare il framework di destinazione predefinito o per impostare come destinazione più framework.
La pubblicazione di un eseguibile dipendente dal framework crea un'app che aggiorna automaticamente all'ultima patch di protezione .NET disponibile sul sistema in cui viene eseguita l'app. Per altre informazioni sul binding di versione in fase di compilazione, vedere Selezionare la versione di .NET da usare.
Modalità di pubblicazione | Comando |
---|---|
File eseguibile dipendente dal framework | dotnet publish -c Release -r <RID> --self-contained false dotnet publish -c Release |
Ogni volta che viene usata l'opzione -r
, il percorso della cartella di output viene modificato in: ./bin/<BUILD-CONFIGURATION>/<TFM>/<RID>/publish/
Se si usa l'app di esempio, eseguire dotnet publish -f net9.0 -r win-x64 --self-contained false
. Questo comando crea l'eseguibile seguente: ./bin/Debug/net9.0/win-x64/publish/apptest1.exe
Nota
È possibile ridurre le dimensioni totali della distribuzione abilitando la modalità invariante della globalizzazione. Questa modalità è utile per le applicazioni che non sono compatibili a livello globale e possono utilizzare le convenzioni di formattazione, le convenzioni di maiuscole e minuscole, il confronto tra stringhe e l'ordinamento della cultura invariante. Per altre informazioni sulla modalità invariante della globalizzazione e su come abilitarla, vedere .NET Globalization Invariant Mode (Modalità invariante della globalizzazione di .NET).
Configurare il comportamento di ricerca dell'installazione di .NET
In .NET 9 e versioni successive è possibile configurare i percorsi di ricerca di installazione .NET del file eseguibile pubblicato tramite le proprietà AppHostDotNetSearch
e AppHostRelativeDotNet
.
AppHostDotNetSearch
consente di specificare uno o più percorsi in cui il file eseguibile cercherà un'installazione .NET:
-
AppLocal
: cartella del file eseguibile dell'app -
AppRelative
: percorso relativo al file eseguibile dell'app -
EnvironmentVariables
: valore delle variabili di ambienteDOTNET_ROOT[_<arch>]
-
Global
: posizioni di installazione globale registrate e predefinite
AppHostRelativeDotNet
specifica il percorso relativo al file eseguibile che verrà cercato quando AppHostDotNetSearch
contiene AppRelative
.
Per altre informazioni, vedere AppHostDotNetSearch
, AppHostRelativeDotNet
e opzioni di posizioni di installazione in apphost.
Distribuzione autonoma
Quando si pubblica una distribuzione completamente autonoma (SCD), l’SDK di .NET crea un eseguibile per una piattaforma specifica. La pubblicazione di una distribuzione autonoma include tutti i file .NET necessari per eseguire l'app, ma non include le dipendenze native di .NET (ad esempio, per .NET 8 su Linux). Queste dipendenze devono essere presenti nel sistema prima dell'esecuzione dell'app.
La pubblicazione di uno SCD crea un'app che non esegue l'aggiornamento automatico alla versione più recente disponibile della patch di sicurezza .NET. Per altre informazioni sul binding di versione in fase di compilazione, vedere Selezionare la versione di .NET da usare.
È necessario usare i seguenti switch con il comando dotnet publish
per pubblicare una SCD:
-r <RID>
Questo interruttore usa un identificatore (RID) per specificare la piattaforma di destinazione. Per un elenco degli identificatori di runtime, vedere Catalogo RID di .NET Core.
--self-contained true
Questa opzione indica all’SDK .NET di creare un eseguibile come distribuzione autonoma.
Modalità di pubblicazione | Comando |
---|---|
Distribuzione autonoma | dotnet publish -c Release -r <RID> --self-contained true |
Suggerimento
- In .NET 6 e versioni successive è possibile ridurre le dimensioni totali delle app autonome compatibili pubblicandole tagliate. Ciò consente al trimmer di rimuovere parti del framework e degli assembly a cui si fa riferimento che non sono inclusi in alcun percorso del codice o che potrebbero essere potenzialmente richiamati nella reflection di runtime. Consultare incompatibilità di ottimizzazione per determinare se l'ottimizzazione è appropriata per l'applicazione.
- È possibile ridurre le dimensioni totali della distribuzione abilitando la modalità invariante della globalizzazione. Questa modalità è utile per le applicazioni che non sono compatibili a livello globale e possono utilizzare le convenzioni di formattazione, le convenzioni di maiuscole e minuscole, il confronto tra stringhe e l'ordinamento della cultura invariante. Per altre informazioni sulla modalità invariante della globalizzazione e su come abilitarla, vedere .NET Core Globalization Invariant Mode (Modalità invariante della globalizzazione di .NET Core).