Quelle est la différence? between.NET noyau and.NET types de projets de bibliothèques de classe Standard?
dans Visual Studio, il y a au moins 3 types différents de bibliothèques de classe que vous pouvez créer:
- De La Bibliothèque De Classes.NET Framework)
- De La Bibliothèque De Classes.NET Standard)
- De La Bibliothèque De Classes.NET de Base)
alors que le premier est ce que nous utilisons depuis des années, un point majeur de confusion que j'avais est quand utiliser les types de bibliothèques .net Standard et .net Core class. J'ai été mordu par ceci récemment en essayant de multi-cibles différentes versions de cadre , et création d'un projet d'essai d'unité .
alors , quelle est la différence entre Class Library (.NET Standard)
et Class Library (.NET Core)
, pourquoi les deux existent, et quand devrions-nous utiliser l'un par rapport à l'autre?
8 réponses
quand utiliser l'un par rapport à l'autre?
la décision est un compromis entre la compatibilité et L'accès API.
utilisez une bibliothèque standard .NET lorsque vous voulez augmenter le nombre d'applications qui seront compatibles avec votre bibliothèque, et vous êtes d'accord avec une diminution de la surface de L'API .NET à laquelle votre bibliothèque peut accéder.
utilisez une bibliothèque .net Core lorsque vous voulez augmenter L'API .NET surface à laquelle votre bibliothèque peut accéder, et vous êtes d'accord pour ne permettre que les applications .net Core d'être compatibles avec votre bibliothèque.
par exemple, une bibliothèque qui cible la norme .NET 1.3 sera compatible avec les applications qui ciblent .NET Framework 4.6, .net Core 1.0, Universal Windows Platform 10.0, et toute autre plate-forme qui supporte la norme .NET 1.3. Cependant, la bibliothèque n'aura pas accès à certaines parties de l'API .NET. Par exemple, l' Microsoft.NETCore.CoreCLR
package est compatible avec .NET Core, mais pas avec .NET Standard.
Quelle est la différence entre une bibliothèque de classe (.net Standard) et une bibliothèque de classe (.NET Core)?
la section décrit la différence.
Compatibilité: les bibliothèques qui ciblent la norme .NET s'exécuteront sur N'importe quelle bibliothèque conforme à la norme .NET exécution, comme .net Core, .net Framework, Mono/Xamarin. D'un autre côté, les bibliothèques qui ciblent .NET Core ne peuvent s'exécuter que sur L'exécution .NET Core.
surface API: les bibliothèques standards de .NET sont fournies avec tout dans NETStandard.Library
, tandis que les bibliothèques centrales de .NET sont fournies avec tout dans Microsoft.NETCore.App
. Ce dernier comprend environ 20 bibliothèques supplémentaires, dont certaines peuvent être ajoutées manuellement à notre bibliothèque standard .NET (comme System.Threading.Thread
) et certaines ne sont pas compatible avec la norme .NET (comme Microsoft.NETCore.CoreCLR
).
également, les bibliothèques.net Core spécifient une exécution et sont fournies avec un modèle d'application. C'est important, par exemple, pour rendre les bibliothèques de classe de test d'unité exécutables.
pourquoi les deux existent-ils?
ignorant les bibliothèques pendant un moment, la raison pour laquelle la norme .NET existe est pour la portabilité; elle définit un ensemble D'API que les plates-formes .NET acceptent mettre. Toute plate-forme qui implémente une norme .NET est compatible avec les bibliothèques qui ciblent cette norme .NET. L'une de ces plateformes compatibles est.net Core.
pour en revenir aux bibliothèques, les modèles de bibliothèques standards .NET existent pour fonctionner sur plusieurs durées d'exécution (au détriment de la surface de L'API). De manière évidente, les modèles de bibliothèque. net Core existent pour accéder à plus de surface API (aux dépens de la compatibilité) et pour spécifier une plate-forme à l'aide de laquelle construire un exécutable.
Un .Net de Base Class Library est construit sur la .Net Standard . Si vous voulez implémenter une bibliothèque qui est portable au .net Framework , . Net de Base et Xamarin , choisissez .Net De La Bibliothèque Standard
. le noyau. Net implémentera finalement la norme .Net 2 (comme le fera Xamarin et .net Framework )
. le noyau Net , Xamarin et . le cadre net peut donc être identifié comme saveurs de . le Standard net
"pour tester à l'avenir vos applications de partage de code et de réutilisation , vous préféreriez implémenter les bibliothèques standards .Net.
Microsoft recommande également d'utiliser .net Standard au lieu de bibliothèques de classe portables .
pour citer MSDN comme source faisant autorité, . la norme de réseau est destinée à être une bibliothèque pour les diriger tous . Comme les images valent mille mots, ce qui suit rendra les choses très claires:
1. Votre scénario d'application actuel (fragmenté)
Comme la plupart d'entre nous, vous êtes probablement dans la situation ci-dessous: (.Net Framework, Xamarin et maintenant .Net de Base aromatisé applications)
2. Qu'est-ce que la bibliothèque standard de .Net va activer pour vous (compatibilité cross-framework)
la mise en œuvre D'une bibliothèque standard. Net permet le partage de code à travers tous ces saveurs différentes:
pour les impatients:
- .net Standard résout le problème du partage de code pour les développeurs .NET sur toutes les plateformes en apportant toutes les API que vous attendez et aimez dans les environnements dont vous avez besoin: applications bureautiques, applications mobiles et jeux, et services cloud:
- .net Standard est un jeu D'APIs que tous .net plates-formes doivent mettre en œuvre . Ce unifie les plates-formes .NET et empêche la fragmentation future .
- . la norme de réseau 2.0 sera mise en œuvre par . le cadre de réseau . NET de Base , et Xamarin . Pour .net Core , cela ajoutera beaucoup D'API existantes qui ont été demandés.
- .net Standard 2.0 inclut un shim de compatibilité pour .net Framework binaires, en augmentant considérablement l'ensemble des bibliothèques que vous pouvez consulter à partir de vos bibliothèques standard .NET.
- . la norme remplacera la classe portative Bibliothèques (PCLs) comme le outillage histoire pour la construction de multi-plateforme .Bibliothèques NET.
pour une table pour vous aider à comprendre quelle est la version la plus haute de la norme .NET que vous pouvez cibler, en fonction des plates-formes .NET que vous avez l'intention d'utiliser, head over here .
Sources: MSDN: Introducing. net Standard
donc la réponse courte serait:
IAnimal == .NetStandard (General)
ICat == .NetCore (Less General)
IDog == .NetFramework (Specific / oldest and has the most features)
.net Framework et .net Core sont deux implémentations différentes de L'exécution .Net. Tant Core que Framework (mais surtout Framework) ont des profils différents qui incluent des sélections plus ou moins importantes (ou simplement différentes) des nombreux API et assemblages que Microsoft a créés pour .Net, en fonction de l'endroit où ils sont installés et dans quel profil. Par exemple, il existe différents API disponibles dans les applications Windows universelles que dans le profil" normal " de Windows. Même sur Windows, vous pouvez avoir le profil "Client" vs le profil "complet". En outre, il existe d'autres implémentations (comme Mono) qui ont leurs propres ensembles de bibliothèques.
. la norme est une spécification pour laquelle des ensembles de bibliothèques et d'assemblages D'API doivent être disponibles. Une application écrite pour la norme .net 1.0 devrait être capable de compiler et d'exécuter avec n'importe quelle version de Framework, Core, Mono, etc, qui annonce prise en charge de la collection de bibliothèques .Net standard 1.0. Il en va de même pour la norme .Net 1.1, 1.5, 1.6, 2.0, etc. Tant que l'exécution prend en charge cette version de Standard, vous pouvez la compiler et l'exécuter.
un projet visant une version de la norme ne pourra pas utiliser des caractéristiques qui ne sont pas incluses dans cette révision de la norme. Cela ne signifie pas que vous ne pouvez pas prendre des dépendances sur d'autres assemblées, ou des API publiées par d'autres fournisseurs (i.e.: articles sur NuGet). Mais cela signifie que toutes les dépendances que vous prenez doivent également inclure le support de votre version de la norme .Net. La norme .Net évolue rapidement, mais elle est encore assez récente, et se préoccupe assez de certains des plus petits profils d'exécution, que cette limitation peut sembler étouffante.
d'autre part, une application ciblée sur la norme devrait pouvoir être utilisée dans plus de situations de déploiement, car en théorie, il peut fonctionner avec le noyau, cadre, Mono, etc. Pour un projet de bibliothèque de classe à la recherche d'une large distribution, c'est une promesse attrayante. Pour un projet de bibliothèque de classe utilisé principalement à des fins internes, il peut ne pas être aussi une préoccupation.
La norme.Net peut également être utile dans les situations où L'équipe SysAdmin souhaite passer de ASP.Net sur les fenêtres ASP.Net pour .net Core sur Linux pour des raisons philosophiques ou de coût, mais l'équipe de développement veut continuer à travailler contre .Net Framework en visuel Studio sur Windows.
.net Standard: pensez - y comme une grande bibliothèque standard. En utilisant ceci comme dépendance, vous ne pouvez faire que des bibliothèques (.Dll), pas exécutables. Une bibliothèque conçue avec le standard .NET comme une dépendance peut être ajoutée à une Xamarine.Androïde, un Xamarin.iOS, un projet .net Core Windows/OSX/Linux.
.net Core: pensez - y comme la continuation de L'ancien .net framework, juste c'est opensource et certaines choses ne sont pas encore implémentées et d'autres ont été dépréciées. Il étend le .NET standard avec des fonctions supplémentaires, mais fonctionne uniquement sur les ordinateurs de bureau. En ajoutant cette dépendance, vous pouvez faire tourner des applications sous Windows, Linux et OSX. (Bien que console seulement pour l'instant, pas D'interfaces graphiques). So. Core. Net = .net Standard + desktop specific stuff.
UWP l'utilise aussi et le nouveau ASP.NET core l'utilise aussi comme une dépendance.
.net existe principalement pour améliorer le partage de code et rendre les API disponibles dans chaque implémentation .Net plus cohérentes.
tout en créant des bibliothèques, nous pouvons avoir la cible as.Net standard 2.0 pour que la bibliothèque créée soit compatible avec les différentes versions de .net Framework,y compris .net Core, Mono..
.net Framework et .NET Core sont deux cadres.
. la norme net est standard (en d'autres termes, spécification).
vous pouvez faire projet exécutable (comme application Console, ou ASP.NET application) avec .net Framework et .net Core, mais pas avec la norme .NET.
avec la norme .NET, vous ne pouvez réaliser que des projets de bibliothèques de classes qui ne peuvent pas être exécutés de manière autonome et qui devraient être référencés par un autre noyau .NET ou .NET. Cadre projet exécutable.
Espère que cela va aider à comprendre le la relation entre les deux .NET API Standard de surface et d'autres .NET plates-formes . Chaque interface représente un cadre cible et les méthodes représentent les groupes d'IPA disponibles sur ce cadre cible.
namespace Analogy
{
// .NET Standard
interface INetStandard10
{
void Primitives();
void Reflection();
void Tasks();
void Xml();
void Collections();
void Linq();
}
interface INetStandard11 : INetStandard10
{
void ConcurrentCollections();
void LinqParallel();
void Compression();
void HttpClient();
}
interface INetStandard12 : INetStandard11
{
void ThreadingTimer();
}
interface INetStandard13 : INetStandard12
{
//.NET Standard 1.3 specific APIs
}
// And so on ...
// .NET Framework
interface INetFramework45 : INetStandard11
{
void FileSystem();
void Console();
void ThreadPool();
void Crypto();
void WebSockets();
void Process();
void Drawing();
void SystemWeb();
void WPF();
void WindowsForms();
void WCF();
}
interface INetFramework451 : INetFramework45, INetStandard12
{
// .NET Framework 4.5.1 specific APIs
}
interface INetFramework452 : INetFramework451, INetStandard12
{
// .NET Framework 4.5.2 specific APIs
}
interface INetFramework46 : INetFramework452, INetStandard13
{
// .NET Framework 4.6 specific APIs
}
interface INetFramework461 : INetFramework46, INetStandard14
{
// .NET Framework 4.6.1 specific APIs
}
interface INetFramework462 : INetFramework461, INetStandard15
{
// .NET Framework 4.6.2 specific APIs
}
// .NET Core
interface INetCoreApp10 : INetStandard15
{
// TODO: .NET Core 1.0 specific APIs
}
// Windows Universal Platform
interface IWindowsUniversalPlatform : INetStandard13
{
void GPS();
void Xaml();
}
// Xamarin
interface IXamarinIOS : INetStandard15
{
void AppleAPIs();
}
interface IXamarinAndroid : INetStandard15
{
void GoogleAPIs();
}
// Future platform
interface ISomeFuturePlatform : INetStandard13
{
// A future platform chooses to implement a specific .NET Standard version.
// All libraries that target that version are instantly compatible with this new
// platform
}
}