Che cos'è ".NET Core"?


323

Recentemente in un blog ufficiale di .NET Framework è stato annunciato che .NET Core sta diventando open source .

Ironia della sorte, l'autore menziona che cosa sarà .NET Core verrà spiegato nel prossimo post. Alcuni ulteriori dettagli sono menzionati in un altro post dell'annuncio .

Da uno schema fornito:

Schema .NET Core

e articoli di testo stesso, suppongo che .NET Core (oltre a cose ovvie come essere open-source) sia una reimplementazione modulare di .NET completo. Vale a dire che i componenti del framework vengono caricati se necessario, proprio come i pacchetti NuGet vengono caricati ora. E ora ASP.NET 5 è uno dei moduli che è già implementato. La mia comprensione di .NET Core è corretta? Forse mi manca qualcosa?


Ho trovato un articolo recente che ho trovato sia breve che molto buono. Copre .NET Standard, .NET Core e .NET Framework e le loro relazioni. Lo consiglio vivamente.


5
C'è un nuovo post sul blog qui blogs.msdn.com/b/dotnet/archive/2014/12/04/… ma è ancora difficile capire quel diagramma. Significa che WPF e WinForms non possono usare .NET Core per esempio?
dodgy_coder

@dodgy_coder Penso che alla fine, sarà solo App Store e ASP.NET 5 a utilizzare per primi la nuova architettura del framework.
Petr Abdulin,

1
@dodgy_coder, è giusto. Al momento le app WPF e WinForms non sono portabili su core .net. Possono essere riqualificati in app universali di Windows. Vedi questo: blogs.msdn.microsoft.com/dotnet/2016/02/10/porting-to-net-core
VivekDev

Risposte:


154

Dal blog .NET che annuncia l'anteprima di .NET 2015: una nuova era per .NET :

.NET Core ha due componenti principali. Include un piccolo runtime creato dalla stessa base di codice del CLR .NET Framework. Il runtime .NET Core include gli stessi GC e JIT (RyuJIT), ma non include funzionalità come Domini applicazione o Sicurezza accesso codice. Il runtime viene fornito tramite NuGet, come parte del pacchetto [ASP.NET Core].

.NET Core include anche le librerie di classi base. Queste librerie sono in gran parte lo stesso codice delle librerie di classi .NET Framework, ma sono state prese in considerazione (rimozione delle dipendenze) per consentirci di fornire un set più piccolo di librerie. Queste librerie vengono spedite come sistema. * Pacchetti NuGet su NuGet.org.

E:

[ASP.NET Core] è il primo carico di lavoro che ha adottato .NET Core. [ASP.NET Core] funziona sia su .NET Framework che .NET Core. Un valore chiave di [ASP.NET Core] è che può essere eseguito su più versioni di [.NET Core] sullo stesso computer. Il sito Web A e il sito Web B possono essere eseguiti su due diverse versioni di .NET Core sullo stesso computer oppure possono utilizzare la stessa versione.

In breve: prima c'era Microsoft .NET Framework , che consiste in un runtime che esegue il codice dell'applicazione e della libreria e una libreria di classi standard quasi completamente documentata .

Il runtime è Common Language Runtime , che implementa Common Language Infrastructure , funziona con il compilatore JIT per eseguire il bytecode CIL (precedentemente MSIL) .

Le specifiche e l'implementazione di Microsoft di .NET erano, data la sua storia e il loro scopo, molto incentrate su Windows e IIS e "fat". Esistono variazioni con un numero inferiore di librerie, spazi dei nomi e tipi , ma pochi sono stati utili per lo sviluppo di desktop o web o sono difficili da trasferire dal punto di vista legale .

Quindi, al fine di fornire una versione non Microsoft di .NET, che poteva essere eseguita su macchine non Windows, doveva essere sviluppata un'alternativa. Non solo il runtime deve essere portato per questo, ma anche l'intera libreria di classi Framework deve essere ben adottata. Inoltre, per essere completamente indipendente da Microsoft, sarà richiesto un compilatore per le lingue più comunemente utilizzate.

Mono è uno dei pochi, se non l'unica implementazione alternativa del runtime , che funziona su vari sistemi operativi oltre a Windows, quasi tutti gli spazi dei nomi dalla libreria di classi Framework a partire da .NET 4.5 e un compilatore VB e C # .

Immettere .NET Core: un'implementazione open-source del runtime e una libreria di classi base minima. Tutte le funzionalità aggiuntive vengono fornite tramite i pacchetti NuGet, distribuendo il runtime specifico, le librerie di framework e i pacchetti di terze parti con l'applicazione stessa.

ASP.NET Core è una nuova versione di MVC e WebAPI, unita a una sottile astrazione del server HTTP, che viene eseguita sul runtime .NET Core, ma anche su .NET Framework.


4
Oh, è così che mi sono perso! In realtà era sotto nella cronologia del blog! Che peccato ..
Petr Abdulin,

17
Sono tutte cose piuttosto nuove e appena descritte, penso che tu abbia fatto una buona domanda. :)
CodeCaster

3
In un secondo momento sembra che non sia il "prossimo post", poiché la descrizione è ancora piuttosto breve.
Petr Abdulin,

2
Non è fondamentalmente ciò che vNext ci stava portando?
ps2goat,

3
Lo facciamo da quando hanno iniziato a pubblicare il framework tramite nuget. Non è necessaria la soluzione alternativa in quel post.
ps2goat,

84

È un sottoinsieme di .NET Framework, avviato con l'edizione Compact Framework. È progredito in Silverlight, Windows Store e Windows Phone. Si è concentrato sul mantenimento di una distribuzione ridotta, adatta per download rapidi e dispositivi con capacità di archiviazione limitate. Ed è più facile da implementare su piattaforme non Windows, e sicuramente questo è stato il motivo per cui è stata scelta come edizione open source. Le parti "difficili" e "costose" del CLR e le librerie della classe base sono omesse.

Altrimenti, è sempre facile riconoscere quando si sceglie una versione di tale framework, perché mancheranno molte chicche. Utilizzerai un insieme distinto di assiemi di riferimento che espongono solo ciò che è supportato dal runtime. È memorizzato sul tuo computer nella C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCoredirectory.


Aggiornamento: dopo la versione .NET Core 2.0 ho visto alcuni numeri rappresentativi che danno una visione decente. Negli ultimi due anni hanno lavorato sodo per il back-port delle API del framework su .NET Core. .NET Core 1.0 supportava originariamente 13.000 API. .NET Core 2.0 ha aggiunto 20.000 API, portando il totale a 32.000 e consentendo il porting di circa il 70% dei pacchetti NuGet esistenti. Esistono un insieme di API troppo fortemente legate a Windows per essere facilmente trasferibili su Linux e MacOS. Coperto dal Windows Compatibility Pack rilasciato di recente, aggiunge altre 20.000 API.


4
Dal post del blog non direi come si presenta un'altra versione del framework "compatta". Annunciata la .NET Coreversione 5.0 che è superiore all'ultimo framework completo. Presumo che intendano dire che è qualcosa di diverso.
Petr Abdulin,

5
Ho appena descritto la storia della versione di .NETCore. Niente di nuovo sotto il sole, è in circolazione da molto tempo. Le modifiche in 5.0 sono incrementali, il nuovo jitter RyuJIT x64 è l'unico a cui riesco a pensare in questo momento. Solo il cambio di licenza è davvero nuovo :)
Hans Passant,

3
Ho capito il tuo punto. Anche se penso ancora che l'annuncio del sottoinsieme del framework come la prossima era di .NET sia un po 'audace.
Petr Abdulin,

50

Ho trovato un articolo recente che ho trovato sia breve che molto buono. Copre .NET Standard, .NET Core e .NET Framework e le loro relazioni. Lo consiglio vivamente. Sfortunatamente, non ho tempo di adattarmi e metterlo qui.

Contenuto della risposta originale di seguito:


Quindi, in base all'ultima voce ufficiale sull'argomento, ecco alcuni punti chiave, come li vedo io:

.NET Core è essenzialmente un fork di .NET Framework la cui implementazione è ottimizzata anche per quanto riguarda le problematiche del factoring.

Riteniamo che .NET Core non sia specifico di .NET Native o ASP.NET 5: BCL e i tempi di esecuzione sono di uso generale e progettati per essere modulari. Come tale, costituisce la base per tutti i futuri verticali .NET.

Quindi .NET Native e ASP.NET 5 sono solo dei "soggetti" di prova per la nuova configurazione del framework, in parte forse perché sono piuttosto diversi:

Inserisci qui la descrizione dell'immagine

Vedi, hanno persino bisogno di un basso livello separato, ma una parte importante di BCL è ancora comune:

Riteniamo che .NET Core non sia specifico di .NET Native o ASP.NET 5: BCL e i tempi di esecuzione sono di uso generale e progettati per essere modulari. Come tale, costituisce la base per tutti i futuri verticali .NET.

Vale a dire, i rettangoli magenta nella parte superiore verranno aggiunti in modo massiccio con i nuovi modelli di app, ma la base rimarrà comune.

Distribuzione NuGet:

A differenza di .NET Framework, la piattaforma .NET Core verrà fornita come un insieme di pacchetti NuGet. Abbiamo optato per NuGet perché è qui che si trova già la maggior parte dell'ecosistema della biblioteca.

Relazione con i quadri attuali:

Per Visual Studio 2015 il nostro obiettivo è assicurarci che .NET Core sia un sottoinsieme puro di .NET Framework. In altre parole, non ci sarebbero vuoti di funzionalità. Dopo il rilascio di Visual Studio 2015, la nostra aspettativa è che .NET Core eseguirà la versione più velocemente di .NET Framework. Ciò significa che ci saranno momenti in cui una funzionalità sarà disponibile solo sulle piattaforme basate su .NET Core.

Sommario:

La piattaforma .NET Core è un nuovo stack .NET ottimizzato per lo sviluppo open source e la consegna agile su NuGet. Stiamo lavorando con la community Mono per renderlo perfetto su Windows, Linux e Mac e Microsoft lo supporterà su tutte e tre le piattaforme.

Manteniamo i valori che .NET Framework apporta allo sviluppo di classe enterprise. Offriremo distribuzioni .NET Core che rappresentano un insieme di pacchetti NuGet che abbiamo testato e supportato insieme. Visual Studio rimane lo sportello unico per lo sviluppo. Il consumo di pacchetti NuGet che fanno parte di una distribuzione non richiede una connessione a Internet.

Fondamentalmente questo può essere pensato come un NET 4.6 con un modello di distribuzione modificato, che, contemporaneamente, è in procinto di diventare open source.


22

La presente documentazione fornisce una buona spiegazione di cosa sia .NET Core, le aree da utilizzare e così via. Le seguenti caratteristiche definiscono meglio .NET Core:

Implementazione flessibile : può essere incluso nella tua app o installato parallelamente a livello di utente o macchina.

Cross-platform : funziona su Windows, macOS e Linux; può essere portato su altri sistemi operativi. I sistemi operativi (SO), le CPU e gli scenari applicativi supportati cresceranno nel tempo, forniti da Microsoft, altre società e privati.

Strumenti da riga di comando : tutti gli scenari di prodotto possono essere esercitati da riga di comando.

Compatibile : .NET Core è compatibile con .NET Framework, Xamarin e Mono, tramite la libreria standard .NET.

Open source : la piattaforma .NET Core è open source, utilizzando le licenze MIT e Apache 2. La documentazione è concessa in licenza sotto CC-BY. .NET Core è un progetto .NET Foundation.

Supportato da Microsoft : .NET Core è supportato da Microsoft, per .NET Core Support

Ed ecco cosa include .NET Core:

Un runtime .NET, che fornisce un sistema di tipi, caricamento di assembly, un garbage collector, interoperabilità nativa e altri servizi di base.

Un insieme di librerie di framework, che forniscono tipi di dati primitivi, tipi di composizione dell'applicazione e utilità fondamentali.

Un set di strumenti SDK e compilatori di linguaggio che consentono l'esperienza degli sviluppatori di base, disponibile in .NET Core SDK.

L'host dell'applicazione 'dotnet', utilizzato per avviare le applicazioni .NET Core. Seleziona il runtime e ospita il runtime, fornisce una politica di caricamento degli assembly e avvia l'app. Lo stesso host viene utilizzato anche per avviare gli strumenti SDK in modo molto simile.


19

.NET Core è una nuova implementazione multipiattaforma di standard .NET (ECMA 335) simile a Mono ma eseguita dalla stessa Microsoft.

Vedi docs.microsoft.com


18

Microsoft ha riconosciuto il futuro paradigma open source del web e ha deciso di aprire .NET ad altri sistemi operativi. .NET Core è un .NET Framework per Mac e Linux. È un .NET Framework "leggero", quindi mancano alcune funzionalità / librerie.

Su Windows, eseguivo ancora .NET Framework e Visual Studio 2015. .NET Core è più amichevole con il mondo open source come Node.js , npm, Yeoman , Docker , ecc.

Puoi sviluppare siti Web completi e API RESTful su Mac o Linux con Visual Studio Code + .NET Core che prima non era possibile. Quindi, se ami Mac o Ubuntu e sei uno sviluppatore .NET, vai avanti e configuralo.

Per Mono vs .NET Core, Mono è stato sviluppato come .NET Framework per Linux che ora è acquisito da Microsoft (società denominata Xamarin ) e utilizzato nello sviluppo mobile. Alla fine, Microsoft potrebbe unire / migrare Mono in .NET Core. Non mi preoccuperei di Mono in questo momento.


12

Stavo provando a creare un nuovo progetto in Visual Studio 2017 oggi (recentemente aggiornato da Visual Studio 2015) e ho notato una nuova serie di scelte per il tipo di progetto. O sono nuovi o è passato un po 'di tempo da quando ho iniziato un nuovo progetto !! :)

Schermata di Visual Studio

Ho trovato questo link alla documentazione e l'ho trovato molto utile, quindi sto condividendo. I dettagli dei proiettili sono anche forniti nell'articolo. Sto solo postando proiettili qui:

È necessario utilizzare .NET Core per l'applicazione server quando:

You have cross-platform needs.
You are targeting microservices.
You are using Docker containers.
You need high performance and scalable systems.
You need side by side of .NET versions by application.

È necessario utilizzare .NET Framework per l'applicazione server quando:

Your application currently uses .NET Framework (recommendation is to extend instead of migrating)
You need to use third-party .NET libraries or NuGet packages not available for .NET Core.
You need to use .NET technologies that are not available for .NET Core.
You need to use a platform that doesnt support .NET Core.

Questo collegamento fornisce un glossario dei termini .NET.


11

Dal sito Web di Microsoft :

.NET Core si riferisce a diverse tecnologie tra cui .NET Core, ASP.NET Core ed Entity Framework Core.

Queste tecnologie sono diverse da quelle native .NET in quanto vengono eseguite utilizzando il runtime CoreCLR (utilizzato nella piattaforma Windows universale ).

Come menzionato nella tua domanda, .NET Core non è solo open-source, ma anche portatile [funziona su MacOS, Windows e Linux]

Gli interni di .NET Core sono inoltre ottimizzati per non utilizzare moduli diversi dalla sua libreria principale a meno che non sia richiesto dall'applicazione.


4
".NET Core si riferisce a diverse tecnologie tra cui .NET Core" ... grandi cose
Kieren Johnstone,

3

Microsoft ha appena annunciato .NET Core v 3.0, che è una versione molto migliorata di .NET Core.

Per maggiori dettagli visita questo fantastico articolo: Differenza tra .NET Framework e .NET Core da aprile 2019.


3
Le risposte solo al link e principalmente le risposte basate sull'opinione sono fortemente scoraggiate . Vedi meta.stackexchange.com/a/8259
doppio segnale acustico

Capito, ho modificato la parte dell'opinione .. grazie per avermelo fatto notare.
itsikha

1
Migliorato in che modo? Potete fornire un riepilogo di ciò che ritenete siano le modifiche e le aggiunte più importanti?
Peter Mortensen,

3

.NET Core è un framework di software per computer gestito gratuito e open source per sistemi operativi Windows, Linux e macOS. È un successore open source e multipiattaforma di .NET Framework.

Le applicazioni .NET Core sono supportate su Windows, Linux e macOS. In breve .NET Core è simile al framework .NET, ma è multipiattaforma, ovvero consente alle applicazioni .NET di funzionare su Windows, Linux e MacOS. Le applicazioni .NET framework possono essere eseguite solo sul sistema Windows. Quindi la differenza di base tra .NET framework e .NET core è che .NET Core è multipiattaforma e .NET framework funziona solo su Windows.

Inoltre, .NET Core ha l'iniezione di dipendenza integrata da Microsoft e non è necessario utilizzare file software / DLL di terze parti per l'iniezione di dipendenza.


1
Puoi approfondire l'iniezione di dipendenza? Cosa significa veramente in questo contesto? Ti riferisci a quadri particolari? Hai dei riferimenti / link?
Peter Mortensen,

1

.NET Core è una versione open source e multipiattaforma di .NET. I prodotti Microsoft, oltre alle grandi capacità che possiedono, sono sempre stati costosi per gli utenti abituali, in particolare gli utenti finali dei prodotti realizzati con le tecnologie .NET.

La maggior parte dei clienti di basso livello preferisce utilizzare Linux come sistema operativo e prima di .NET Core non vorrebbero utilizzare le tecnologie Microsoft, nonostante le grandi capacità di essi. Ma dopo la produzione di .NET Core, questo problema è stato completamente risolto e possiamo soddisfare i nostri clienti senza considerare il loro sistema operativo, ecc.


Non è stato risolto completamente. Avrai difficoltà a utilizzare un'applicazione Windows Form o WPF su Linux.
Peter Mortensen,

0

.NET Core è una versione open source e multipiattaforma di .NET Framework.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.