Distribuzione di applicazioni .NET Core.NET Core application deployment

È possibile creare tre tipi di distribuzioni per le applicazioni .NET Core:You can create three types of deployments for .NET Core applications:

  • Distribuzione dipendente dal framework.Framework-dependent deployment. Come suggerisce il nome, la distribuzione dipendente dal framework si basa sulla presenza di una versione condivisa a livello di sistema di .NET Core nel sistema di destinazione.As the name implies, framework-dependent deployment (FDD) relies on the presence of a shared system-wide version of .NET Core on the target system. Poiché .NET Core è già presente, l'app è anche portabile tra le installazioni di .NET Core.Because .NET Core is already present, your app is also portable between installations of .NET Core. L'app contiene solo il proprio codice e le dipendenze di terze parti non sono comprese nelle librerie di .NET Core.Your app contains only its own code and any third-party dependencies that are outside of the .NET Core libraries. Le distribuzioni dipendenti dal framework contengono file con estensione dll che possono essere avviati dalla riga di comando tramite l'utilità dotnet.FDDs contain .dll files that can be launched by using the dotnet utility from the command line. Ad esempio, dotnet app.dll esegue un'applicazione denominata app.For example, dotnet app.dll runs an application named app.

  • Distribuzione autonoma.Self-contained deployment. A differenza delle distribuzioni dipendenti dal framework, una distribuzione autonoma non si basa sulla presenza dei componenti condivisi nel sistema di destinazione.Unlike FDD, a self-contained deployment (SCD) doesn't rely on the presence of shared components on the target system. Tutti i componenti, inclusi librerie e runtime di .NET Core, sono inclusi nell'applicazione e isolati dalle altre applicazioni .NET Core.All components, including both the .NET Core libraries and the .NET Core runtime, are included with the application and are isolated from other .NET Core applications. Le distribuzioni autonome includono un file eseguibile (ad esempio app.exe su piattaforme Windows per un'applicazione denominata app), che è una versione ridenominata dell'host .NET Core specifico della piattaforma, e un file con estensione dll (ad esempio app.dll), che indica l'applicazione.SCDs include an executable (such as app.exe on Windows platforms for an application named app), which is a renamed version of the platform-specific .NET Core host, and a .dll file (such as app.dll), which is the actual application.

  • File eseguibili dipendenti dal framework.Framework-dependent executables. Genera un file eseguibile che viene eseguito in una piattaforma di destinazione.Produces an executable that runs on a target platform. Analogamente alle distribuzioni dipendenti dal framework, i file eseguibili dipendenti dal framework sono specifici della piattaforma e non sono autonomi.Similar to FDDs, framework-dependent executables (FDE) are platform-specific and aren't self-contained. L'esecuzione di queste distribuzioni si basa ancora sulla presenza di una versione di .NET Core a livello di sistema condivisa.These deployments still rely on the presence of a shared system-wide version of .NET Core to run. Diversamente da una distribuzione autonoma, l'app contiene solo il codice e le dipendenze di terze parti non sono comprese nelle librerie di .NET Core.Unlike an SCD, your app only contains your code and any third-party dependencies that are outside of the .NET Core libraries. I file eseguibili dipendenti dal framework generano un file eseguibile che viene eseguito nella piattaforma di destinazione.FDEs produce an executable that runs on the target platform.

Distribuzioni dipendenti dal frameworkFramework-dependent deployments (FDD)

Per una distribuzione dipendente dal framework, vengono distribuite solo l'app e le dipendenze di terze parti.For an FDD, you deploy only your app and third-party dependencies. L'app userà la versione di .NET Core presente nel sistema di destinazione.Your app will use the version of .NET Core that's present on the target system. Si tratta del modello di distribuzione predefinito per le app .NET Core e ASP.NET Core destinate a .NET Core.This is the default deployment model for .NET Core and ASP.NET Core apps that target .NET Core.

Perché creare una distribuzione dipendente dal framework?Why create a framework-dependent deployment?

Una distribuzione dipendente dal framework offre numerosi vantaggi:Deploying an FDD has a number of advantages:

  • Non è necessario definire in anticipo i sistemi operativi di destinazione in cui verrà eseguita l'app .NET Core.You don't have to define the target operating systems that your .NET Core app will run on in advance. Poiché .NET Core usa un formato di file PE comune per gli eseguibili e le librerie indipendentemente dal sistema operativo, .NET Core può eseguire l'app indipendentemente dal sistema operativo sottostante.Because .NET Core uses a common PE file format for executables and libraries regardless of operating system, .NET Core can execute your app regardless of the underlying operating system. Per altre informazioni sul formato di file PE, vedere .NET Assembly File Format (Formato del file di assembly .NET).For more information on the PE file format, see .NET Assembly File Format.

  • La dimensione del pacchetto di distribuzione è ridotta.The size of your deployment package is small. È sufficiente distribuire l'app e le relative dipendenze, non .NET Core.You only deploy your app and its dependencies, not .NET Core itself.

  • A meno che non vengano sottoposte a override, le distribuzioni dipendenti dal framework useranno l'ultimo runtime servito installato nel sistema di destinazione.Unless overridden, FDDs will use the latest serviced runtime installed on the target system. In questo modo l'applicazione può usare la versione di correzione più recente del runtime di .NET Core.This allows your application to use the latest patched version of the .NET Core runtime.

  • Più app usano la stessa installazione di .NET Core, in questo modo si riduce sia lo spazio su disco sia l'utilizzo della memoria nei sistemi host.Multiple apps use the same .NET Core installation, which reduces both disk space and memory usage on host systems.

Sono presenti anche alcuni svantaggi:There are also a few disadvantages:

  • L'app può essere eseguita solo se la versione di .NET Core specificata come destinazione dall'app o una versione successiva è già installata nel sistema host.Your app can run only if the version of .NET Core your app targets, or a later version, is already installed on the host system.

  • Nelle versioni successive è possibile che il runtime e le librerie di .NET Core vengano modificate senza notificare l'utente.It's possible for the .NET Core runtime and libraries to change without your knowledge in future releases. In rari casi, questo scenario può comportare la modifica del comportamento dell'app.In rare cases, this may change the behavior of your app.

Distribuzioni autonomeSelf-contained deployments (SCD)

Per una distribuzione autonoma, si distribuiscono l'app e le eventuali dipendenze di terze parti richieste, insieme alla versione di .NET Core usata per compilare l'app.For a self-contained deployment, you deploy your app and any required third-party dependencies along with the version of .NET Core that you used to build the app. Poiché la creazione di una distribuzione autonoma non include le dipendenze native di .NET Core su più piattaforme, queste dipendenze devono essere presenti prima di eseguire l'applicazione.Creating an SCD doesn't include the native dependencies of .NET Core on various platforms, so these must be present before the app runs. Per altre informazioni sull'associazione di versioni in fase di esecuzione, vedere l'articolo sull'associazione delle versioni in .NET Core.For more information on version binding at runtime, see the article on version binding in .NET Core.

A partire da NET Core 2.1 SDK (versione 2.1.300), .NET Core supporta il roll forward della versione della patch.Starting with NET Core 2.1 SDK (version 2.1.300), .NET Core supports patch version roll forward. Quando si crea una distribuzione autonoma, gli strumenti di .NET Core includono automaticamente l'ultimo il runtime servito della versione di .NET Core a cui l'applicazione è destinata.When you create a self-contained deployment, .NET Core tools automatically include the latest serviced runtime of the .NET Core version that your application targets. L'ultimo runtime servito include le patch di sicurezza e altre correzioni di bug. Il runtime servito non deve essere presente nel sistema di compilazione. Viene scaricato automaticamente da NuGet.org. Per altre informazioni, incluse le istruzioni su come rifiutare esplicitamente il roll forward della versione della patch, vedere Roll forward del runtime di distribuzione autonoma.(The latest serviced runtime includes security patches and other bug fixes.) The serviced runtime does not have to be present on your build system; it is downloaded automatically from NuGet.org. For more information, including instructions on how to opt out of patch version roll forward, see Self-contained deployment runtime roll forward.

Le distribuzioni dipendenti dal framework e le distribuzioni autonome usano eseguibili host separati, quindi è possibile firmare un eseguibile host per una distribuzione autonoma con la firma del server di pubblicazione.FDD and SCD deployments use separate host executables, so you can sign a host executable for an SCD with your publisher signature.

Perché distribuire una distribuzione autonoma?Why deploy a self-contained deployment?

Una distribuzione autonoma offre due vantaggi principali:Deploying a Self-contained deployment has two major advantages:

  • Si dispone del controllo esclusivo della versione di .NET Core che viene distribuita con l'app.You have sole control of the version of .NET Core that is deployed with your app. .NET Core può essere usato solo dall'utente..NET Core can be serviced only by you.

  • È possibile garantire che il sistema di destinazione esegua l'app .NET Core, poiché viene specificata la versione di .NET Core in cui verrà eseguita.You can be assured that the target system can run your .NET Core app, since you're providing the version of .NET Core that it will run on.

Sono presenti anche alcuni svantaggi:It also has a number of disadvantages:

  • Poiché .NET Core è incluso nel pacchetto di distribuzione, è necessario selezionare in anticipo le piattaforme di destinazione per cui vengono creati i pacchetti di distribuzione.Because .NET Core is included in your deployment package, you must select the target platforms for which you build deployment packages in advance.

  • La dimensione del pacchetto di distribuzione è relativamente elevata, poiché è necessario includere .NET Core, nonché l'app e le relative dipendenze di terze parti.The size of your deployment package is relatively large, since you have to include .NET Core as well as your app and its third-party dependencies.

    A partire da .NET Core 2.0, è possibile ridurre le dimensioni della distribuzione nei sistemi Linux di circa 28 MB usando la modalità invariante della globalizzazione.Starting with .NET Core 2.0, you can reduce the size of your deployment on Linux systems by approximately 28 MB by using .NET Core globalization invariant mode. In genere, .NET Core in Linux si basa sulle librerie ICU per il supporto della globalizzazione.Ordinarily, .NET Core on Linux relies on the ICU libraries for globalization support. Nella modalità invariante le librerie non sono incluse nella distribuzione e tutte le impostazioni cultura si comportano come le impostazioni cultura inglese non dipendenti da paese/area geografica.In invariant mode, the libraries are not included with your deployment, and all cultures behave like the invariant culture.

  • La distribuzione di numerose app .NET Core autonome a un sistema comporta l'utilizzo di quantità significative di spazio su disco, poiché ogni app duplica i file di .NET Core.Deploying numerous self-contained .NET Core apps to a system can consume significant amounts of disk space, since each app duplicates .NET Core files.

File eseguibili dipendenti dal frameworkFramework-dependent executables (FDE)

A partire da .NET Core 2.2, è possibile distribuire l'app come file eseguibile dipendente dal framework, con eventuali dipendenze di terze parti necessarie.Starting with .NET Core 2.2, you can deploy your app as an FDE, along with any required third-party dependencies. L'app userà la versione di .NET Core installata nel sistema di destinazione.Your app will use the version of .NET Core that's installed on the target system.

Perché distribuire un file eseguibile dipendente dal framework?Why deploy a framework-dependent executable?

Un file eseguibile dipendente dal framework offre numerosi vantaggi:Deploying an FDE has a number of advantages:

  • La dimensione del pacchetto di distribuzione è ridotta.The size of your deployment package is small. È sufficiente distribuire l'app e le relative dipendenze, non .NET Core.You only deploy your app and its dependencies, not .NET Core itself.

  • Più app usano la stessa installazione di .NET Core, in questo modo si riduce sia lo spazio su disco sia l'utilizzo della memoria nei sistemi host.Multiple apps use the same .NET Core installation, which reduces both disk space and memory usage on host systems.

  • L'app può essere eseguita chiamando il file eseguibile pubblicato senza richiamare direttamente l'utilità dotnet.Your app can be run by calling the published executable without invoking the dotnet utility directly.

Sono presenti anche alcuni svantaggi:There are also a few disadvantages:

  • L'app può essere eseguita solo se la versione di .NET Core specificata come destinazione dall'app o una versione successiva è già installata nel sistema host.Your app can run only if the version of .NET Core your app targets, or a later version, is already installed on the host system.

  • Nelle versioni successive è possibile che il runtime e le librerie di .NET Core vengano modificate senza notificare l'utente.It's possible for the .NET Core runtime and libraries to change without your knowledge in future releases. In rari casi, questo scenario può comportare la modifica del comportamento dell'app.In rare cases, this may change the behavior of your app.

  • È necessario pubblicare l'app per ogni piattaforma di destinazione.You must publish your app for each target platform.

Esempi dettagliatiStep-by-step examples

Per esempi dettagliati della distribuzione di app .NET Core con gli strumenti dell'interfaccia della riga di comando, vedere Deploying .NET Core Apps with CLI Tools (Distribuzione di app .NET Core con gli strumenti dell'interfaccia della riga di comando).For step-by-step examples of deploying .NET Core apps with CLI tools, see Deploying .NET Core Apps with CLI Tools. Per esempi dettagliati della distribuzione di app .NET Core con Visual Studio, vedere Deploying .NET Core Apps with Visual Studio (Distribuzione di app .NET Core con Visual Studio).For step-by-step examples of deploying .NET Core apps with Visual Studio, see Deploying .NET Core Apps with Visual Studio.

Vedere ancheSee also