Confronto tra .NET e .NET Framework per le app server

Per la creazione di applicazioni lato server sono supportate due implementazioni di .NET.

Implementazione Versioni incluse
.NET .NET Core 1.0 - 3.1, .NET 5 e versioni successive di .NET.
.NET Framework .NET Framework 1.0 - 4.8

Entrambe condividono gran parte degli stessi componenti e possono condividere codice. Esistono, però, differenze fondamentali tra le due opzioni e la scelta dipende dall'obiettivo che si vuole conseguire. Questo articolo fornisce materiale sussidiario per identificare i casi in cui è opportuno usare ciascuna delle due opzioni.

Usare .NET per l'applicazione server nei casi seguenti:

  • Si hanno esigenze multipiattaforma.
  • Si hanno come destinazione microservizi.
  • Si usano contenitori Docker.
  • Si hanno esigenze di elevate prestazioni e scalabilità.
  • È necessaria l'installazione side-by-side delle versioni di .NET in base all'applicazione.

Usare .NET Framework per l'applicazione server nei casi seguenti:

  • L'app usa attualmente .NET Framework (si consiglia di optare per l'estensione anziché per la migrazione).
  • L'app usa pacchetti NuGet o librerie di terze parti non disponibili per .NET.
  • L'app usa tecnologie .NET Framework non disponibili per .NET.
  • L'app usa una piattaforma che non supporta .NET.

Quando scegliere .NET

Le sezioni seguenti descrivono in modo più dettagliato i motivi indicati in precedenza per la scelta di .NET rispetto a .NET Framework.

Esigenze multipiattaforma

Usare .NET se l'applicazione Web o del servizio deve essere eseguita su più piattaforme. Ad esempio, Windows, Linux e macOS usano .NET.

.NET supporta i sistemi operativi indicati in precedenza come workstation di sviluppo. Visual Studio fornisce un ambiente di sviluppo integrato (IDE) per Windows e macOS. È anche possibile usare Visual Studio Code, che viene eseguito in macOS, Linux e Windows. Visual Studio Code supporta .NET, incluse le funzionalità IntelliSense e di debug. La maggior parte degli editor di terze parti, ad esempio Sublime, Emacs e VI, è compatibile con .NET. Questi editor di terze parti accedono alla funzionalità IntelliSense dell'editor tramite Omnisharp. È inoltre possibile evitare di usare gli editor di codice ricorrendo direttamente all'interfaccia della riga di comando di .NET, disponibile per tutte le piattaforme supportate.

Architettura di microservizi

Un'architettura di microservizi consente di usare una combinazione di tecnologie in un limite di servizi. Grazie a questa tecnologia è possibile adottare gradualmente .NET per nuovi microservizi che operano con altri microservizi o servizi. Ad esempio, è possibile combinare microservizi o servizi sviluppati con .NET Framework, Java, Ruby o altre tecnologie monolitiche.

Le piattaforme di infrastruttura disponibili sono numerose. Azure Service Fabric è appositamente concepita per sistemi di microservizi complessi e di grandi dimensioni. Servizio app di Azure è la soluzione ideale per i microservizi senza stato. Le alternative basate su Docker sono adatte a qualsiasi approccio ai microservizi, come descritto nella sezione Contenitori. Grazie al supporto di .NET, tutte queste piattaforme rappresentano soluzioni ideali per l'hosting dei microservizi.

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).

Contenitori

I contenitori sono usati spesso insieme a un'architettura di microservizi, ma possano essere impiegati anche per creare contenitori di servizi o app Web basati su qualsiasi modello architettonico. .NET Framework può essere usato con i contenitori Windows. La modularità e la natura leggera di .NET lo rendono però una scelta migliore per i contenitori. Quando si crea e si distribuisce un contenitore, la sua immagine risulta notevolmente più piccola con .NET che con .NET Framework. Trattandosi di un'opzione multipiattaforma, è possibile distribuire le app server in contenitori Docker di Linux.

È possibile ospitare i contenitori Docker nell'infrastruttura Linux o Windows in uso oppure in un servizio cloud, ad esempio il servizio Azure Kubernetes. Il servizio Azure Kubernetes consente infatti di gestire, orchestrare e ridimensionare applicazioni basate su contenitore nel cloud.

Sistemi a prestazioni elevate e scalabili

Se il sistema richiede i massimi livelli di prestazioni e scalabilità, le scelte migliori sono .NET e ASP.NET Core. Grazie al runtime server ad alte prestazioni per Linux e Windows Server, ASP.NET Core viene considerato come un framework Web dalle prestazioni ottimali nei benchmark TechEmpower.

Le prestazioni e la scalabilità sono particolarmente importanti per le architetture con centinaia di microservizi in esecuzione. Con ASP.NET Core i sistemi vengono eseguiti con un numero di server/macchine virtuali sensibilmente inferiore e questo si traduce in una riduzione dei costi di infrastruttura e hosting.

Installazione side-by-side delle versioni di .NET in base al livello di applicazione

Per installare applicazioni con dipendenze in versioni diverse di .NET, è consigliabile usare .NET. Questa implementazione supporta l'installazione side-by-side di versioni diverse del runtime .NET nello stesso computer. Grazie all'installazione side-by-side, è possibile eseguire più servizi nello stesso server, ognuno con la sua versione di .NET, riducendo inoltre i rischi e risparmiando sui costi degli aggiornamenti di applicazioni e delle operazioni IT.

L'installazione side-by-side non è possibile con .NET Framework. Si tratta di un componente di Windows e in un computer può esistere una sola versione alla volta. Ogni versione di .NET Framework sostituisce la versione precedente. Se si installa una nuova app destinata a una versione successiva di .NET Framework, le app esistenti eseguite nel computer potrebbero non funzionare correttamente perché la versione precedente è stata sostituita.

Quando scegliere .NET Framework

.NET offre vantaggi significativi per i nuovi modelli di applicazione e le nuove applicazioni. .NET Framework, tuttavia, continua a essere la scelta naturale per molti scenari esistenti e di conseguenza non è stato sostituito da .NET per tutte le applicazioni server.

Applicazioni .NET Framework correnti

Nella maggior parte dei casi, non è necessario eseguire la migrazione delle applicazioni esistenti a .NET. Consigliamo invece di usare .NET per estendere un'applicazione esistente, ad esempio con la scrittura di un nuovo servizio Web in ASP.NET Core.

Pacchetti NuGet o di librerie di terze parti non disponibili per .NET

.NET Standard consente la condivisione di codice in tutte le implementazioni di .NET, incluso .NET Core/5+. Con .NET Standard 2.0, una modalità di compatibilità consente a progetti .NET Standard e .NET di gestire riferimenti a librerie .NET Framework. Per altre informazioni, vedere Supporto delle librerie .NET Framework.

È 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.

Tecnologie .NET Framework non disponibili in .NET

Alcune tecnologie .NET Framework non sono disponibili in .NET. Di seguito sono elencate le tecnologie più comuni non disponibili in .NET:

  • Applicazioni Web Forms ASP.NET: Web Forms ASP.NET è disponibile solo in .NET Framework. Non è possibile usare ASP.NET Core per Web Forms ASP.NET.

  • Applicazioni Pagine Web ASP.NET: Pagine Web ASP.NET non è incluso in ASP.NET Core.

  • Servizi correlati ai flussi di lavoro: Windows Workflow Foundation (WF), Servizi flusso di lavoro (WCF e WF in un unico servizio) e WCF Data Services (in precedenza noto come "ADO.NET Data Services") sono disponibili solo in .NET Framework.

  • Supporto per i linguaggi: Visual Basic e F# sono attualmente supportati in .NET, ma non per tutti i tipi di progetto. Per un elenco dei modelli di progetto supportati, vedere le opzioni del modello per dotnet new.

Per altre informazioni, vedere Tecnologie .NET Framework non disponibili in .NET.

La piattaforma non supporta .NET

Alcune piattaforme Microsoft o di terze parti non supportano .NET. Alcuni servizi di Azure offrono un SDK non ancora disponibile per l'utilizzo in .NET. In questi casi è possibile usare l'API REST equivalente anziché l'SDK client.

Vedi anche