Scelta di .NET Core o .NET Framework per le app serverChoosing between .NET Core and .NET Framework for server apps

Per la creazione di applicazioni lato server con .NET sono supportate due implementazioni: .NET Framework e .NET Core.There are two supported implementations for building server-side applications with .NET: .NET Framework and .NET Core. Entrambe condividono gran parte degli stessi componenti e possono condividere codice.Both share many of the same components and you can share code across the two. Esistono, però, differenze fondamentali tra le due opzioni e la scelta dipende dall'obiettivo che si vuole conseguire.However, there are fundamental differences between the two and your choice depends on what you want to accomplish. Questo articolo fornisce materiale sussidiario per identificare i casi in cui è opportuno usare ciascuna delle due opzioni.This article provides guidance on when to use each.

Usare .NET Core per l'applicazione server nei casi seguenti:Use .NET Core for your server application when:

  • Si hanno esigenze multipiattaforma.You have cross-platform needs.
  • Si scelgono microservizi.You are targeting microservices.
  • Si usano contenitori Docker.You are using Docker containers.
  • Si hanno esigenze di elevate prestazioni e scalabilità.You need high-performance and scalable systems.
  • È necessaria l'installazione side-by-side delle versioni di .NET in base all'applicazione.You need side-by-side .NET versions per application.

Usare .NET Framework per l'applicazione server nei casi seguenti:Use .NET Framework for your server application when:

  • L'app usa attualmente .NET Framework (si consiglia di optare per l'estensione anziché per la migrazione).Your app currently uses .NET Framework (recommendation is to extend instead of migrating).
  • L'app usa pacchetti NuGet o librerie .NET di terze parti non disponibili per .NET Core.Your app uses third-party .NET libraries or NuGet packages not available for .NET Core.
  • L'app usa tecnologie .NET non disponibili per .NET Core.Your app uses .NET technologies that aren't available for .NET Core.
  • L'app usa una piattaforma che non supporta .NET Core.Your app uses a platform that doesn’t support .NET Core. Windows, macOS e Linux supportano .NET Core.Windows, macOS, and Linux support .NET Core.

Quando scegliere .NET CoreWhen to choose .NET Core

Nelle sezioni seguenti sono descritti in modo più dettagliato i motivi indicati in precedenza per la scelta di .NET Core.The following sections give a more detailed explanation of the previously stated reasons for picking .NET Core.

Esigenze multipiattaformaCross-platform needs

Usare .NET Core se l'applicazione (Web/servizio) deve essere eseguita su più piattaforme (Windows, Linux e macOS).If your application (web/service) needs to run on multiple platforms (Windows, Linux, and macOS), use .NET Core.

.NET Core supporta i sistemi operativi indicati in precedenza come workstation di sviluppo..NET Core supports the previously mentioned operating systems as your development workstation. Visual Studio fornisce un ambiente di sviluppo integrato (IDE) per Windows e macOS.Visual Studio provides an Integrated Development Environment (IDE) for Windows and macOS. È anche possibile usare Visual Studio Code, che viene eseguito in macOS, Linux e Windows.You can also use Visual Studio Code, which runs on macOS, Linux, and Windows. Visual Studio Code supporta infatti .NET Core, incluse le funzionalità IntelliSense e di debug.Visual Studio Code supports .NET Core, including IntelliSense and debugging. La maggior parte degli editor di terze parti, ad esempio Sublime, Emacs e VI, è compatibile con .NET Core.Most third-party editors, such as Sublime, Emacs, and VI, work with .NET Core. Questi editor di terze parti accedono alla funzionalità IntelliSense dell'editor tramite Omnisharp.These third-party editors get editor IntelliSense using Omnisharp. È inoltre possibile evitare di usare gli editor di codice ricorrendo direttamente agli strumenti dell'interfaccia della riga di comando di .NET Core, disponibili per tutte le piattaforme supportate.You can also avoid any code editor and directly use the .NET Core CLI tools, available for all supported platforms.

Architettura di microserviziMicroservices architecture

Un'architettura di microservizi consente di usare una combinazione di tecnologie in un limite di servizi.A microservices architecture allows a mix of technologies across a service boundary. Grazie a questa tecnologia è quindi possibile adottare gradualmente .NET Core per nuovi microservizi che operano con altri microservizi o servizi.This technology mix enables a gradual embrace of .NET Core for new microservices that work with other microservices or services. Ad esempio, è possibile combinare microservizi o servizi sviluppati con .NET Framework, Java, Ruby o altre tecnologie monolitiche.For example, you can mix microservices or services developed with .NET Framework, Java, Ruby, or other monolithic technologies.

Le piattaforme di infrastruttura disponibili sono numerose.There are many infrastructure platforms available. Azure Service Fabric è appositamente concepita per sistemi di microservizi complessi e di grandi dimensioni.Azure Service Fabric is designed for large and complex microservice systems. Servizio app di Azure è la soluzione ideale per i microservizi senza stato.Azure App Service is a good choice for stateless microservices. Le alternative basate su Docker sono adatte a qualsiasi tipo di approccio ai microservizi, come descritto nella sezione Contenitori.Microservices alternatives based on Docker fit any kind of microservices approach, as explained in the Containers section. Grazie al supporto di .NET Core, tutte queste piattaforme rappresentano soluzioni ideali per l'hosting dei microservizi.All these platforms support .NET Core and make them ideal for hosting your microservices.

Per altre informazioni sull'architettura dei microservizi, vedere .NET Microservices. Architecture for Containerized .NET Applications (Microservizi .NET. Architettura per le applicazioni .NET incluse in contenitori).For more information about microservices architecture, see .NET Microservices. Architecture for Containerized .NET Applications.

ContenitoriContainers

I contenitori sono in genere usati insieme a un'architettura di microservizi,Containers are commonly used in conjunction with a microservices architecture. ma possano essere impiegati anche per creare contenitori di servizi o app Web basati su qualsiasi modello architettonico.Containers can also be used to containerize web apps or services that follow any architectural pattern. È possibile usare .NET Framework su contenitori Windows, anche se le caratteristiche di modularità e leggerezza di .NET Core rendono questa piattaforma la scelta ideale per i contenitori..NET Framework can be used on Windows containers, but the modularity and lightweight nature of .NET Core makes it a better choice for containers. Quando si crea e si distribuisce un contenitore, la sua immagine risulta notevolmente più piccola con .NET Core rispetto a .NET Framework.When creating and deploying a container, the size of its image is much smaller with .NET Core than with .NET Framework. Trattandosi di un'opzione multipiattaforma, è ad esempio possibile distribuire le app server in contenitori Docker di Linux.Because it's cross-platform, you can deploy server apps to Linux Docker containers, for example.

È possibile ospitare i contenitori Docker nell'infrastruttura Linux o Windows in uso oppure in un servizio cloud, ad esempio il servizio Azure Kubernetes.Docker containers can be hosted in your own Linux or Windows infrastructure, or in a cloud service such as Azure Kubernetes Service. Il servizio Azure Kubernetes consente infatti di gestire, orchestrare e ridimensionare applicazioni basate su contenitore nel cloud.Azure Kubernetes Service can manage, orchestrate, and scale container-based applications in the cloud.

Esigenze di elevate prestazioni e scalabilitàA need for high-performance and scalable systems

Se il sistema richiede i massimi livelli di prestazioni e scalabilità, le opzioni ottimali sono rappresentate da .NET Core e ASP.NET Core.When your system needs the best possible performance and scalability, .NET Core and ASP.NET Core are your best options. Grazie al runtime server ad alte prestazioni per Linux e Windows Server, .NET viene considerato come un framework Web dalle prestazioni ottimali nei benchmark TechEmpower.High-performance server runtime for Windows Server and Linux makes .NET a top performing web framework on TechEmpower benchmarks.

Le prestazioni e la scalabilità sono particolarmente importanti per le architetture con centinaia di microservizi in esecuzione.Performance and scalability are especially relevant for microservices architectures, where hundreds of microservices may be running. Con ASP.NET Core i sistemi vengono eseguiti con un numero di server/macchine virtuali sensibilmente inferioreWith ASP.NET Core, systems run with a much lower number of servers/Virtual Machines (VM). e questo si traduce in una riduzione dei costi di infrastruttura e hosting.The reduced servers/VMs save costs in infrastructure and hosting.

Necessità di installazione side-by-side delle versioni di .NET in base al livello di applicazioneA need for side by side of .NET versions per application level

Per installare applicazioni con dipendenze in versioni diverse di .NET, è consigliabile usare .NET Core,To install applications with dependencies on different versions of .NET, we recommend .NET Core. in quanto tale piattaforma supporta l'installazione side-by-side di versioni diverse del runtime .NET Core nello stesso computer..NET Core offers side-by-side installation of different versions of the .NET Core runtime on the same machine. Grazie all'installazione side-by-side, è possibile eseguire più servizi nello stesso server, ognuno con la rispettiva versione di .NET Core,This side-by-side installation allows multiple services on the same server, each of them on its own version of .NET Core. riducendo inoltre i rischi e risparmiando sui costi degli aggiornamenti di applicazioni e delle operazioni IT.It also lowers risks and saves money in application upgrades and IT operations.

Quando scegliere .NET FrameworkWhen to choose .NET Framework

.NET Core offre vantaggi significativi per i nuovi modelli di applicazione e le nuove applicazioni..NET Core offers significant benefits for new applications and application patterns. .NET Framework, tuttavia, continua a essere la scelta naturale per molti scenari esistenti e di conseguenza non è stato sostituito da .NET Core per tutte le applicazioni server.However, the .NET Framework continues to be the natural choice for many existing scenarios and as such the .NET Framework isn't replaced by .NET Core for all server applications.

Applicazioni .NET Framework correntiCurrent .NET Framework applications

Nella maggior parte dei casi, non è necessario eseguire la migrazione delle applicazioni esistenti a .NET Core.In most cases, you don’t need to migrate your existing applications to .NET Core. Al contrario, un approccio consigliato è quello di usare .NET Core per estendere un'applicazione esistente, ad esempio con la scrittura di un nuovo servizio Web in ASP.NET Core.Instead, a recommended approach is to use .NET Core as you extend an existing application, such as writing a new web service in ASP.NET Core.

Necessità di usare pacchetti NuGet o librerie .NET di terze parti non disponibili per .NET CoreA need to use third-party .NET libraries or NuGet packages not available for .NET Core

Per le librerie è in corso l'adozione rapida di .NET Standard,Libraries are quickly embracing .NET Standard. che consente la condivisione di codice in tutte le implementazioni di .NET, incluso .NET Core..NET Standard enables sharing code across all .NET implementations including .NET Core. Con .NET Standard 2.0, questa operazione è ancora più semplice:With .NET Standard 2.0, this is even easier:

  • La superficie dell'API è diventata più estesa.The API surface became much larger.
  • È stata introdotta la modalità di compatibilità di .NET Framework,Introduced a .NET Framework compatibility mode. che consente a progetti .NET Standard/.NET Core di fare riferimenti a librerie .NET Framework.This compatibility mode allows .NET Standard/.NET Core projects to reference .NET Framework libraries. Per altre informazioni sulla modalità di compatibilità, vedere Announcing .NET Standard 2.0 (Annuncio di .NET Standard 2.0).To learn more about the compatibility mode, see Announcing .NET Standard 2.0.

In questo modo, è necessario ricorrere a .NET Framework solo nei casi in cui le librerie o i pacchetti NuGet usano tecnologie non disponibili in .NET Standard o .NET Core.So only in cases where the libraries or NuGet packages use technologies that aren't available in .NET Standard/.NET Core, you need to use the .NET Framework.

Necessità di usare tecnologie .NET non disponibili per .NET CoreA need to use .NET technologies not available for .NET Core

Esistono tecnologie di .NET Framework non disponibili in .NET Core.Some .NET Framework technologies aren't available in .NET Core. Alcune potrebbero essere incluse in versioni successive di .NET Core,Some of them might be available in later .NET Core releases. mentre altre non si applicano ai nuovi modelli di applicazione basati su .NET Core ed è possibile che non vengano mai rese disponibili.Others don’t apply to the new application patterns targeted by .NET Core and may never be available. Di seguito sono elencate le tecnologie più comuni non disponibili in .NET Core:The following list shows the most common technologies not found in .NET Core:

  • Applicazioni Web Form ASP.NET: Web Form ASP.NET è disponibile solo in .NET Framework,ASP.NET Web Forms applications: ASP.NET Web Forms are only available in the .NET Framework. di conseguenza non è possibile usare ASP.NET Core per Web Form ASP.NET.ASP.NET Core cannot be used for ASP.NET Web Forms. Non è inoltre previsto il trasferimento di Web Form ASP.NET in .NET Core.There are no plans to bring ASP.NET Web Forms to .NET Core.

  • Applicazioni Pagine Web ASP.NET: Pagine Web ASP.NET non è incluso in ASP.NET Core.ASP.NET Web Pages applications: ASP.NET Web Pages aren't included in ASP.NET Core.

  • Implementazione di servizi WCF:WCF services implementation. anche se è presente una libreria WCF client per l'utilizzo di servizi WCF da .NET Core, l'implementazione di server WCF è attualmente disponibile solo in .NET Framework.Even when there’s a WCF-Client library to consume WCF services from .NET Core, WCF server implementation is currently only available in the .NET Framework. Questo scenario non è attualmente previsto per .NET Core, ma verrà preso in considerazione per il futuro.This scenario is not part of the current plan for .NET Core but it’s being considered for the future.

  • Servizi correlati ai flussi di lavoro: Windows Workflow Foundation (WF), Servizi flussi di lavoro (WCF e WF in un unico servizio) e WCF Data Services (in precedenza "ADO.NET Data Services") sono disponibili solo in .NET Framework.Workflow-related services: Windows Workflow Foundation (WF), Workflow Services (WCF + WF in a single service) and WCF Data Services (formerly known as "ADO.NET Data Services") are only available in the .NET Framework. e non è previsto alcun trasferimento di WF/WCF+WF/WCF Data Services in .NET Core.There are no plans to bring WF/WCF+WF/WCF Data Services to .NET Core.

  • Supporto per i linguaggi: Visual Basic e F# sono attualmente supportati in .NET Core, ma non per tutti i tipi di progetto.Language support: Visual Basic and F# are currently supported in .NET Core, but not for all project types. Per un elenco dei modelli di progetto supportati, vedere le opzioni del modello per dotnet new.For a list of supported project templates, see Template options for dotnet new.

In aggiunta a quanto indicato nella roadmap ufficiale, sono presenti altri framework da trasferire in .NET Core.In addition to the official roadmap, there are other frameworks to be ported to .NET Core. Per un elenco completo, vedere i problemi di CoreFX contrassegnati come port-to-core.For a full list, see the CoreFX issues marked as port-to-core. Questo elenco non indica che Microsoft trasferirà necessariamente i componenti specificati in .NET Core,This list doesn’t represent a commitment from Microsoft to bring those components to .NET Core. ma rappresenta solo il desiderio della community di procedere in tal senso.They're simply capturing the desire from the community to do so. Se si è interessati a uno dei componenti contrassegnati come port-to-core, è consigliabile partecipare alle discussioni su GitHub.If you care about any of the components marked as port-to-core, participate in the discussions on GitHub. Se inoltre si ritiene di dover aggiungere alcune osservazioni, è possibile inserire un nuovo problema nel repository CoreFX.And if you think something is missing, file a new issue in the CoreFX repository.

Necessità di usare una piattaforma che non supporta .NET CoreA need to use a platform that doesn’t support .NET Core

Alcune piattaforme Microsoft o di terze parti non supportano .NET Core.Some Microsoft or third-party platforms don’t support .NET Core. Alcuni servizi di Azure offrono un SDK non ancora disponibile per l'utilizzo in .NET Core.Some Azure services provide an SDK not yet available for consumption on .NET Core. Questa situazione è transitoria poiché tutti i servizi di Azure usano .NET Core.This is a transitional circumstance, as all of Azure services use .NET Core. Nel frattempo, è possibile usare l'API REST equivalente anziché l'SDK client.In the meantime, you can always use the equivalent REST API instead of the client SDK.

Vedere ancheSee also