Qu'est-ce que «.NET Core»?

323

Récemment, dans un blog officiel sur .NET Framework, il a été annoncé que .NET Core deviendrait open source .

Ironiquement, l'auteur mentionne que ce qu'est .NET Core sera expliqué dans le prochain post. Quelques détails supplémentaires sont mentionnés dans un autre message d'annonce .

À partir d'un schéma fourni:

Diagramme .NET Core

et le texte des articles lui-même, je suppose que .NET Core (à côté de choses évidentes comme être open-source) est une réimplémentation modulaire du .NET complet. C'est-à-dire que les composants du framework sont chargés si nécessaire, un peu comme les packages NuGet sont chargés maintenant. Et maintenant, ASP.NET 5 est l'un des modules qui est déjà implémenté. Ma compréhension de .NET Core est-elle correcte? Peut-être que je manque quelque chose?


J'ai trouvé un article récent que j'ai trouvé à la fois court et très bon. Il couvre .NET Standard, .NET Core et .NET Framework et leur relation. Je le recommande fortement.

Petr Abdulin
la source
5
Il y a un nouveau billet de blog ici à ce sujet blogs.msdn.com/b/dotnet/archive/2014/12/04/… mais il est toujours difficile de comprendre ce diagramme. Cela signifie-t-il que WPF et WinForms ne peuvent pas utiliser .NET Core par exemple?
dodgy_coder
@dodgy_coder Je pense qu'ils le feront finalement, c'est juste que Store Apps et ASP.NET 5 sont les premiers à utiliser une nouvelle architecture de framework.
Petr Abdulin
1
@dodgy_coder, c'est à droite. Pour l'instant, les applications WPF et WinForms ne sont pas portables sur le noyau .net. Ils peuvent être redéveloppés en applications universelles Windows. Voir ceci: blogs.msdn.microsoft.com/dotnet/2016/02/10/porting-to-net-core
VivekDev

Réponses:

154

Extrait du blog .NET annonçant l'aperçu de .NET 2015: une nouvelle ère pour .NET :

.NET Core comprend deux composants principaux. Il comprend un petit runtime construit à partir de la même base de code que le .NET Framework CLR. Le runtime .NET Core comprend les mêmes GC et JIT (RyuJIT), mais n'inclut pas de fonctionnalités telles que les domaines d'application ou la sécurité d'accès au code. Le runtime est fourni via NuGet, dans le cadre du package [ASP.NET Core].

.NET Core inclut également les bibliothèques de classes de base. Ces bibliothèques sont en grande partie le même code que les bibliothèques de classes .NET Framework, mais ont été prises en compte (suppression des dépendances) pour nous permettre d'expédier un plus petit ensemble de bibliothèques. Ces bibliothèques sont livrées en tant que packages System. * NuGet sur NuGet.org.

Et:

[ASP.NET Core] est la première charge de travail à avoir adopté .NET Core. [ASP.NET Core] s'exécute à la fois sur .NET Framework et .NET Core. Une valeur clé de [ASP.NET Core] est qu'il peut s'exécuter sur plusieurs versions de [.NET Core] sur la même machine. Le site Web A et le site Web B peuvent fonctionner sur deux versions différentes de .NET Core sur la même machine, ou ils peuvent utiliser la même version.

En bref: d'abord, il y avait Microsoft .NET Framework , qui se compose d'un runtime qui exécute le code d'application et de bibliothèque, et d'une bibliothèque de classes standard presque entièrement documentée .

Le runtime est Common Language Runtime , qui implémente Common Language Infrastructure , fonctionne avec le compilateur JIT pour exécuter le bytecode CIL (anciennement MSIL) .

La spécification et l'implémentation de .NET par Microsoft étaient, compte tenu de son histoire et de son objectif, très centrées sur Windows et IIS et "grosses". Il existe des variantes avec moins de bibliothèques, d'espaces de noms et de types , mais peu d'entre elles étaient utiles pour le développement Web ou de bureau ou sont difficiles à porter d'un point de vue légal .

Ainsi, afin de fournir une version non Microsoft de .NET, qui pourrait fonctionner sur des machines non Windows, une alternative a dû être développée. Non seulement le runtime doit être porté pour cela, mais également la bibliothèque de classes Framework entière pour être bien adoptée. En plus de cela, pour être totalement indépendant de Microsoft, un compilateur pour les langues les plus couramment utilisées sera nécessaire.

Mono est l'une des rares, sinon la seule implémentation alternative du runtime , qui s'exécute sur différents systèmes d'exploitation en plus de Windows, presque tous les espaces de noms de la bibliothèque de classes Framework à partir de .NET 4.5 et d'un compilateur VB et C # .

Entrez .NET Core: une implémentation open-source du runtime et une bibliothèque de classes de base minimale. Toutes les fonctionnalités supplémentaires sont fournies via les packages NuGet, déployant le runtime spécifique, les bibliothèques de framework et les packages tiers avec l'application elle-même.

ASP.NET Core est une nouvelle version de MVC et WebAPI, associée à une abstraction de serveur HTTP mince, qui s'exécute sur le runtime .NET Core - mais également sur .NET Framework.

CodeCaster
la source
4
Oh, c'est comme ça que je l'ai raté! C'était en fait ci-dessous dans la chronologie du blog! Une telle honte ..
Petr Abdulin
17
Tout cela est assez nouveau et à peine décrit, je pense que vous avez posé une bonne question. :)
CodeCaster
3
Sur une deuxième réflexion, il semble que ce ne soit pas le "prochain article", car la description est encore assez brève.
Petr Abdulin
2
N'est-ce pas essentiellement ce que vNext nous apportait?
ps2goat
3
Nous le faisons depuis qu'ils ont commencé à publier le framework via nuget. Pas besoin de la solution de contournement dans ce poste.
ps2goat
84

Il s'agit d'un sous-ensemble du .NET Framework, démarré avec l'édition Compact Framework. Il a progressé dans Silverlight, Windows Store et Windows Phone. Il s'est concentré sur la réduction du déploiement, adapté aux téléchargements rapides et aux appareils avec des capacités de stockage limitées. Et il est plus facile d'évoquer sur des plates-formes non Windows, et c'est sûrement la raison pour laquelle il a été choisi comme édition open source. Les parties "difficiles" et "coûteuses" du CLR et les bibliothèques de classes de base sont omises.

Sinon, il est toujours facile de reconnaître quand vous ciblez une telle version du framework, car beaucoup de goodies seront manquants. Vous allez utiliser un ensemble distinct d'assemblys de référence qui exposent uniquement ce qui est pris en charge par le runtime. Il est stocké sur votre machine dans le C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCorerépertoire.


Mise à jour: après la sortie de .NET Core 2.0, j'ai vu des chiffres représentatifs qui donnent un aperçu décent. Ils ont travaillé d'arrache-pied pour le back-porting des API du framework vers .NET Core au cours des deux dernières années. .NET Core 1.0 a initialement pris en charge 13 000 API. .NET Core 2.0 a ajouté 20 000 API, ce qui porte le total à 32 000 et permet de porter environ 70% des packages NuGet existants. Il existe un ensemble d'API trop fortement intégrées à Windows pour être faciles à porter sur Linux et MacOS. Couvert par le pack de compatibilité Windows récemment publié, il ajoute 20 000 API supplémentaires.

Hans Passant
la source
4
De l'article de blog, je ne dirais pas à quoi cela ressemble une autre version du cadre «compact». La .NET Coreversion 5.0 annoncée est supérieure à la dernière version complète du framework. Je suppose que cela signifie que c'est quelque chose de différent.
Petr Abdulin,
5
Je viens de décrire l'historique de la version .NETCore. Rien de nouveau sous le soleil, il existe depuis longtemps. Les changements dans 5.0 sont incrémentiels, le nouveau jitter RyuJIT x64 est le seul auquel je puisse penser en ce moment. Seul le changement de licence est vraiment nouveau :)
Hans Passant
3
Je vois ce que tu veux dire. Bien que je pense toujours que l'annonce du sous-ensemble de framework comme la prochaine ère de .NET est un peu audacieuse.
Petr Abdulin
50

J'ai trouvé un article récent que j'ai trouvé à la fois court et très bon. Il couvre .NET Standard, .NET Core et .NET Framework et leur relation. Je le recommande fortement. Malheureusement, je n'ai pas le temps de m'adapter et de le mettre ici.

Contenu de la réponse originale ci-dessous:


Donc, sur la base de la dernière entrée officielle sur le sujet, voici quelques points clés tels que je les vois:

.NET Core est essentiellement un fork du .NET Framework dont l'implémentation est également optimisée autour des problèmes de factorisation.

Nous pensons que .NET Core n'est pas spécifique à .NET Native ni à ASP.NET 5 - le BCL et les runtimes sont à usage général et conçus pour être modulaires. En tant que tel, il constitue la base de toutes les futures verticales .NET.

Donc .NET Native et ASP.NET 5 ne sont que des «sujets» de test pour la nouvelle configuration du framework, en partie peut-être parce qu'ils sont assez différents:

Entrez la description de l'image ici

Vous voyez, ils ont même besoin de bas niveau séparés, mais une grande partie de BCL est toujours courante:

Nous pensons que .NET Core n'est pas spécifique à .NET Native ni à ASP.NET 5 - le BCL et les runtimes sont à usage général et conçus pour être modulaires. En tant que tel, il constitue la base de toutes les futures verticales .NET.

C'est-à-dire que les rectangles magenta sur le dessus seront ajoutés massivement avec les nouveaux modèles d'application, mais la base restera commune.

Déploiement NuGet:

Contrairement au .NET Framework, la plate-forme .NET Core sera livrée sous la forme d'un ensemble de packages NuGet. Nous avons choisi NuGet parce que c'est là que se trouve déjà la majorité de l'écosystème des bibliothèques.

Relation avec les cadres actuels:

Pour Visual Studio 2015, notre objectif est de nous assurer que .NET Core est un sous-ensemble pur du .NET Framework. En d'autres termes, il n'y aurait pas de lacunes dans les fonctionnalités. Après la publication de Visual Studio 2015, nous nous attendons à ce que .NET Core soit plus rapide que le .NET Framework. Cela signifie qu'il y aura des moments où une fonctionnalité ne sera disponible que sur les plateformes basées sur .NET Core.

Résumé:

La plate-forme .NET Core est une nouvelle pile .NET optimisée pour le développement open source et la livraison agile sur NuGet. Nous travaillons avec la communauté Mono pour le rendre parfait sur Windows, Linux et Mac, et Microsoft le prendra en charge sur les trois plates-formes.

Nous conservons les valeurs que le .NET Framework apporte au développement de classe entreprise. Nous proposerons des distributions .NET Core qui représentent un ensemble de packages NuGet que nous avons testés et pris en charge ensemble. Visual Studio reste votre guichet unique pour le développement. La consommation de packages NuGet faisant partie d'une distribution ne nécessite pas de connexion Internet.

Fondamentalement, cela peut être considéré comme un .NET 4.6 avec un modèle de distribution modifié, qui, en même temps, est en train de devenir open source.

Petr Abdulin
la source
22

La documentation actuelle contient une bonne explication de ce qu'est .NET Core, des domaines à utiliser, etc. Les caractéristiques suivantes définissent le mieux .NET Core:

Déploiement flexible : peut être inclus dans votre application ou installé côte à côte à l'échelle de l'utilisateur ou de la machine.

Multi-plateforme : Fonctionne sous Windows, MacOS et Linux; peut être porté sur d'autres systèmes d'exploitation. Les systèmes d'exploitation (OS), les processeurs et les scénarios d'application pris en charge augmenteront avec le temps, fournis par Microsoft, d'autres sociétés et des particuliers.

Outils de ligne de commande : tous les scénarios de produit peuvent être exécutés sur la ligne de commande.

Compatible : .NET Core est compatible avec .NET Framework, Xamarin et Mono, via la bibliothèque standard .NET.

Open source : la plate-forme .NET Core est open source, utilisant les licences MIT et Apache 2. La documentation est sous licence CC-BY. .NET Core est un projet .NET Foundation.

Pris en charge par Microsoft : .NET Core est pris en charge par Microsoft, par .NET Core Support

Et voici ce que .NET Core comprend:

Un runtime .NET, qui fournit un système de type, un chargement d'assembly, un garbage collector, une interopérabilité native et d'autres services de base.

Un ensemble de bibliothèques d'infrastructure, qui fournissent des types de données primitifs, des types de composition d'application et des utilitaires fondamentaux.

Un ensemble d'outils SDK et de compilateurs de langage qui permettent l'expérience de développeur de base, disponible dans le SDK .NET Core.

L'hôte d'application «dotnet», utilisé pour lancer les applications .NET Core. Il sélectionne le runtime et héberge le runtime, fournit une politique de chargement des assemblys et lance l'application. Le même hôte est également utilisé pour lancer les outils SDK de la même manière.

Ensemble
la source
19

.NET Core est une nouvelle implémentation multiplateforme des normes .NET (ECMA 335) similaire à Mono mais réalisée par Microsoft lui-même.

Voir docs.microsoft.com

farfareast
la source
18

Microsoft a reconnu le futur paradigme open source Web et a décidé d'ouvrir .NET à d'autres systèmes d'exploitation. .NET Core est un .NET Framework pour Mac et Linux. Il s'agit d'un .NET Framework «léger», donc certaines fonctionnalités / bibliothèques sont manquantes.

Sous Windows, je continuerais à exécuter .NET Framework et Visual Studio 2015. .NET Core est plus convivial avec le monde open source comme Node.js , npm, Yeoman , Docker , etc.

Vous pouvez développer des sites Web à part entière et des API RESTful sur Mac ou Linux avec Visual Studio Code + .NET Core, ce qui n'était pas possible auparavant. Donc, si vous aimez Mac ou Ubuntu et que vous êtes un développeur .NET, allez-y et configurez-le.

Pour Mono vs .NET Core, Mono a été développé en tant que .NET Framework pour Linux qui est maintenant acquis par Microsoft (société appelée Xamarin ) et utilisé dans le développement mobile. Finalement, Microsoft peut fusionner / migrer Mono vers .NET Core. Je ne m'inquiéterais pas pour Mono en ce moment.

Manish Jain
la source
12

J'essayais de créer un nouveau projet dans Visual Studio 2017 aujourd'hui (récemment mis à niveau à partir de Visual Studio 2015) et j'ai remarqué un nouvel ensemble de choix pour le type de projet. Soit ils sont nouveaux, soit ça fait un moment que j'ai commencé un nouveau projet !! :)

Capture d'écran de Visual Studio

Je suis tombé sur ce lien de documentation et l' ai trouvé très utile, donc je partage. Les détails des balles sont également fournis dans l'article. Je poste juste des balles ici:

Vous devez utiliser .NET Core pour votre application serveur lorsque:

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.

Vous devez utiliser .NET Framework pour votre application serveur lorsque:

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.

Ce lien fournit un glossaire des termes .NET.

joym8
la source
11

Depuis le site Web de Microsoft :

.NET Core fait référence à plusieurs technologies, notamment .NET Core, ASP.NET Core et Entity Framework Core.

Ces technologies sont différentes de celles du .NET natif en ce qu'elles s'exécutent à l'aide du runtime CoreCLR (utilisé dans la plateforme Windows universelle ).

Comme vous l'avez mentionné dans votre question, .NET Core n'est pas seulement open-source, mais également portable [fonctionne sur MacOS, Windows et Linux]

Les composants internes de .NET Core sont également optimisés pour ne pas utiliser différents modules de sa bibliothèque principale, sauf si cela est requis par l'application.

Salah Alshaal
la source
4
".NET Core fait référence à plusieurs technologies, dont .NET Core" ... des trucs formidables
Kieren Johnstone
3

Microsoft vient d'annoncer .NET Core v 3.0, qui est une version très améliorée de .NET Core.

Pour plus de détails, visitez cet excellent article: Différence entre .NET Framework et .NET Core d'avril 2019.

itsikha
la source
3
Les réponses en lien uniquement et les réponses principalement basées sur des opinions sont fortement déconseillées . Veuillez consulter meta.stackexchange.com/a/8259
double bip
J'ai compris, j'ai édité la partie opinion .. merci de me l'avoir fait savoir.
itsikha
1
Amélioré de quelle manière? Pouvez-vous fournir un résumé de ce que vous pensez être les changements et ajouts les plus importants?
Peter Mortensen
3

.NET Core est un framework logiciel gratuit et open source géré pour les systèmes d'exploitation Windows, Linux et macOS. Il s'agit d'un successeur open source multiplateforme de .NET Framework.

Les applications .NET Core sont prises en charge sur Windows, Linux et macOS. En résumé, .NET Core est similaire au .NET Framework, mais il est multiplateforme, c'est-à-dire qu'il permet aux applications .NET de s'exécuter sur Windows, Linux et MacOS. Les applications du framework .NET ne peuvent s'exécuter que sur le système Windows. Ainsi, la différence fondamentale entre .NET Framework et .NET Core est que .NET Core est multiplateforme et .NET Framework ne fonctionne que sur Windows.

En outre, .NET Core dispose d'une injection de dépendances intégrée par Microsoft et vous n'avez pas à utiliser de logiciels tiers / fichiers DLL pour l'injection de dépendances.

Waleed Naveed
la source
1
Pouvez-vous élaborer sur l'injection de dépendance? Qu'est-ce que cela signifie réellement dans ce contexte? Faites-vous référence à des cadres particuliers? Avez-vous des références / liens?
Peter Mortensen
1

.NET Core est une version open source et multiplateforme de .NET. Les produits Microsoft, en plus des grandes capacités dont ils disposent, ont toujours été chers pour les utilisateurs habituels, en particulier les utilisateurs finaux de produits fabriqués par les technologies .NET.

La plupart des clients de bas niveau préfèrent utiliser Linux comme système d'exploitation et avant .NET Core, ils n'aimeraient pas utiliser les technologies Microsoft, malgré leurs grandes capacités. Mais après la production de .NET Core, ce problème est complètement résolu et nous pouvons satisfaire nos clients sans tenir compte de leur système d'exploitation, etc.

sajadre
la source
Il n'est pas complètement résolu. Vous aurez du mal à utiliser une application Windows Forms ou WPF sous Linux.
Peter Mortensen
0

.NET Core est une version open source et multiplateforme de .NET Framework.

JEuvin
la source