45 votes

.NET Standard, .Net Core, PCL

Je suis complètement déconcerté par tout ce discours sur .Net Standard. Dans un sens, l'idée d'une norme .NET de la bibliothèque de l'air génial. J'ai remarqué que dans la galerie NuGet, vous pouvez choisir .NET Standard pour de nombreuses plates-formes (par exemple, Silverlight). Mais qui confond l'enfer hors de moi. Est .NET standard d'une bibliothèque? Ou une DLL format?

De toute façon, il y a maintenant .NET de Base des projets, ainsi que l'ancien PCL projets, mais je ne vois pas de modèles Visual Studio pour .NET Standard. Bien que, je l'ai fait savoir que si vous allez dans les paramètres du projet, vous pouvez passer de l'un PCL existant bibliothèque de plus de .NET Standard.

De toute façon, la question de base, je suis poser est de savoir quel type de bibliothèque doit-on cibler? Je vais principalement faire pour Xamarin projets, mais ce serait bien si nous pouvions partager ces bibliothèques avec d'autres plates-formes, notamment .NET Core, et UWP.

Mais, je suis vraiment confus quant à pourquoi Microsoft ont mis en évidence deux apparemment identiques de la bibliothèque de types à la fois: .NET Core, et .NET Standard.

EDIT: je suis maintenant beaucoup moins confus au sujet de cette. J'ai éditer le post original car je n'ai pas encore complètement répondu à ma propre question. Voici ce que je pense que la clé de la compréhension de ces choses sont. Je suis ouvert à des corrections ici.

Définitions

NET de Base - un .NET en fonction de l'environnement d'exécution qui est conforme à l' .NET Standard définition de l'API.

PCL - un .NET de la bibliothèque de format pris en charge par plusieurs environnements d'exécution, y compris .NET, Mono, Windows Phone, et ainsi de suite

.NET Standard (Définition 1) - Un ensemble d'API standard définitions .NET environnements d'exécution

.NET Standard (Définition 2) - un .NET de la bibliothèque de format pris en charge par plusieurs environnements d'exécution, y compris .NET, Mono, Windows Phone, et ainsi de suite qui est une continuation de la PCL format. Dans Visual Studio, un PCL bibliothèque peuvent être convertis à un .NET de la bibliothèque Standard en allant dans les propriétés du projet et le montage le framework cible.

9voto

hburton Points 93

Je crois que cette ressource répond à la plupart de vos questions:

https://docs.microsoft.com/en-us/dotnet/articles/standard/library

L' .NET de la Bibliothèque Standard est une spécification formelle de .NET Api qui sont destinés à être disponibles sur tous les .NET runtimes. La motivation derrière la Bibliothèque Standard, c'est d'établir une plus grande uniformité dans l' .NET de l'écosystème.

Donc si je comprends bien, les autres types de bibliothèques sont spécifiques de la plateforme et .NET standard de la plate-forme agnostique à un point.

Si vous souhaitez que votre code disponible sur différentes plateformes ensuite .NET standard semble idéale, mais attention à la version de l' .NET standard que les autres plates-formes de soutien (voir le tableau dans le lien).

Espérons que cette aide

9voto

Melbourne Developer Points 1712

Ce de Samuel Englard (https://github.com/dotnet/corefx/issues/973#issuecomment-249582799):

.NET Dll sont mis en forme selon l'ECMA-335 (Mieux connue sous le nom Common Language Infrastructure). Ce format est vrai dans toutes les les plates-formes que nous appelons .NET, Plein Cadre, de Base, Xamarin, Mono, Silverlight, etc.

La raison pour laquelle vous ne pouviez pas utiliser une DLL compilée contre une plate-forme avec une autre est que le format n'a pas de spécifier les Api (en règle générale). Ainsi, alors qu'ils pourraient tous lire la DLL que vous passerais les questions de classe XYZ étant dans l'espace de noms A. B. C sur une plate-forme et dans l'espace de noms D. E. F sur une autre, si elle existait.

PCLs "résolu" en faisant deux choses:

Ils ont utilisé Type de Transfert de sorte que même si vous avez écrit votre code attend classe XYZ dans l'espace de noms A. B. C, il a pu être trouvé sur les plates-formes qui l'a fait ailleurs. Il a limité ce que les Api que vous pouvez utiliser pour le plus bas de la commune, partagée par toutes les plates-formes que vous vouliez.

En prenant un PCL et le convertir en un .NET de projet Standard n'est pas un recompiler en raison de format de sortie, mais en raison de la méta données inclus (Type de Transfert en particulier).

Donc, je pense que l'essentiel .NET bibliothèques Standard sont pas différents de PCL bibliothèques à l'exception du fait qu'ils ont mis une couche sur le dessus d'un autre ensemble normalisé de l'Api, et les Api peuvent mettre en œuvre des différents pointeurs (Type de transfert).

.NET de Base est bien sûr un environnement d'exécution, mais je pense que c'est juste très étroitement aligné avec .NET Standard. Je ne pense pas qu'elle a une relation particulière à d'autres que le fait qu'il met en œuvre .NET Api Standard.

Veuillez voir le glossaire: https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/glossary.md

3voto

lazy Points 528

La norme est de cibler un ensemble spécifique de l'API similaire à l'API Android versions. La bibliothèque nuget est juste méta-paquet qui contient toutes les bibliothèques qui confirme à la norme.

Scott Hunter sur MSDEV spectacle a expliqué ce concept très bien. La peine de vérifier it out - http://msdevshow.com/2016/07/dot-net-core-with-scott-hunter/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X