Quelle est la différence entre le Standard .NET de base et .NET types de classe de projet de bibliothèque?

voix
343

Dans Visual Studio, il y a au moins 3 différents types de bibliothèque de classes que vous pouvez créer:

  • Bibliothèque de classes (.NET Framework)
  • Bibliothèque de classes (Standard .NET)
  • Bibliothèque de classes (de base .NET)

Alors que le premier est ce que nous avons utilisé pendant des années, un important point de confusion que j'ai eu est quand utiliser la norme .NET et Core .NET types de bibliothèque de classe. J'ai été mordu par ce récemment lors d'une tentative de versions différentes du framework multi-cibles , et la création d' un projet de test unitaire .

Alors, quelle est la différence entre Class Library (.NET Standard)et Class Library (.NET Core), pourquoi n'existent à la fois, et quand doit - on utiliser un sur l'autre?

Créé 21/03/2017 à 22:34
source utilisateur
Dans d'autres langues...                            


9 réponses

voix
248

Quand devons-nous utiliser l'un sur l'autre?

La décision est un compromis entre la compatibilité et l'accès aux API.

Utilisez une bibliothèque standard .NET lorsque vous souhaitez 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 votre bibliothèque peut accéder.

Utilisez une bibliothèque de base .NET lorsque vous souhaitez augmenter la surface de l'API .NET votre bibliothèque peut accéder, et vous êtes d'accord avec uniquement des applications de base permettant .NET d'être compatible avec votre bibliothèque.

Par exemple, une bibliothèque qui cible standard .NET 1.3 sera compatible avec les applications qui ciblent .NET Framework 4.6, .NET 1.0 de base, plate - forme Windows Universal 10.0, et toute autre plate - forme qui prend en charge la norme .NET 1.3. La bibliothèque ne sera pas avoir accès à certaines parties de l'API .NET, cependant. Par exemple, le Microsoft.NETCore.CoreCLRpackage est compatible avec Core .NET mais pas avec la norme .NET.

Quelle est la différence entre la bibliothèque de classes (Standard .NET) et la bibliothèque de classes (Core .NET)?

La section des cadres fondés sur le paquet ici décrit la différence.

Compatibilité: Les bibliothèques qui cible standard .NET fonctionne sur tout l'exécution conforme à la norme .NET, comme base .NET, .NET Framework, Mono / Xamarin. D'autre part, les bibliothèques qui ciblent .NET de base ne peut fonctionner que sur le moteur d'exécution Core .NET.

API Surface: bibliothèques .NET standard viennent avec tout NETStandard.Libraryalors que les bibliothèques .NET de base viennent avec tout Microsoft.NETCore.App. Ce dernier comprend environ 20 bibliothèques supplémentaires, dont certains que nous pouvons ajouter manuellement à notre .NET bibliothèque standard ( par exemple System.Threading.Thread) et dont certains ne sont pas compatibles avec la norme .NET ( par exemple Microsoft.NETCore.CoreCLR).

En outre, les bibliothèques .NET de base spécifient une durée d'exécution et sont livrés avec un modèle d'application. Cela est important, par exemple, pour que les bibliothèques de classe de test unitaire runnable.

Pourquoi existe deux?

Ignorer les bibliothèques pour un moment, la raison pour laquelle existe la norme .NET est pour la portabilité; il définit un ensemble d'API que les plates-formes .NET acceptent de mettre en œuvre. Toute plate-forme qui implémente une norme .NET est compatible avec les bibliothèques qui ciblent cette norme .NET. L'une de ces plates-formes compatibles est .NET de base.

Pour en revenir aux bibliothèques, les modèles de bibliothèque .NET standard existent pour fonctionner sur plusieurs runtimes (au détriment de la surface de l'API). Par contrecoup, les modèles de base des bibliothèques .NET existent pour accéder à une plus grande surface de l'API (au détriment de la compatibilité) et de spécifier une plate-forme sur laquelle construire un exécutable.

Créé 21/03/2017 à 23:33
source utilisateur

voix
150

TL; DR A .Net de base des bibliothèques de classe repose sur la norme .Net . Si vous souhaitez implémenter une bibliothèque qui est portable au Net Framework ,. Net de base et Xamarin , choisissez une .Net bibliothèque standard

.Net Core de mettre en application .Net Standard 2 ( tout comme Xamarin et Net Framework )

.Net de base , Xamarin et Framework .Net peuvent donc être identifiés comme des saveurs de .Net standard

Pour vos applications à l'épreuve pour le partage de code et la réutilisation, vous préférez mettre en œuvre .Net bibliothèques standard.

Microsoft recommande également que vous utilisez .NET standard au lieu des bibliothèques de classes portables .

Pour citer MSDN comme une source, .Net standard est destiné à être une bibliothèque pour les gouverner tous . Comme les images valent mille mots, ce qui suit va rendre les choses très claires:

1. Votre scénario d'application actuelle (fragmentée)

Comme la plupart d'entre nous, vous êtes probablement dans la situation ci-dessous: (Framework .Net, Xamarin et applications .Net maintenant de base aromatisé)

entrez la description d'image ici

2. Qu'est-ce que la bibliothèque standard .Net permettra pour vous (compatibilité inter-cadre)

La mise en œuvre d'une bibliothèque standard .Net permet le partage de code entre toutes ces saveurs différentes:

Une bibliothèque pour les gouverner tous

Pour les impatients: TL; DR

  1. .NET standard résout le problème de partage de code pour les développeurs .NET à travers toutes les plateformes en apportant toutes les API que vous attendez et de l' amour à travers les environnements que vous avez besoin: des applications de bureau, des applications mobiles et des jeux et des services de cloud computing:
  2. .NET standard est un ensemble d'API que toutes les plates - formes .NET ont à mettre en œuvre . Cette unifie les plates - formes .NET et empêche la fragmentation future .
  3. .NET standard 2.0 sera mis en œuvre par .NET Framework ,. NET de base et Xamarin . Pour base .NET , cela va ajouter un grand nombre des API existantes qui ont été demandées.
  4. Standard .NET 2.0 inclut une cale de compatibilité pour .NET Framework binaires, ce qui augmente de manière significative l'ensemble des bibliothèques que vous pouvez référencer des bibliothèques .NET standard.
  5. .NET standard remplacera les bibliothèques de classe (Portable PCL) comme l'histoire d'outillage pour la construction de bibliothèques .NET multi-plateformes.

Pour une table pour aider à comprendre ce que la plus haute version de la norme .NET que vous pouvez cibler, basé sur les plates - formes .NET vous avez l' intention d'exécuter sur, la tête ici .

Sources: MSDN: Présentation standard .Net

Créé 01/07/2017 à 13:44
source utilisateur

voix
53

Donc, la réponse courte serait:

IAnimal == .NetStandard (General)
IBird == .NetCore (Less General)
IEagle == .NetFramework (Specific / oldest and has the most features)
Créé 27/03/2017 à 00:39
source utilisateur

voix
42

.Net Framework et .Net de base sont deux implémentations différentes du moteur d' exécution .Net. Les deux Core - cadre (mais surtout cadre) ont des profils différents qui incluent des sélections plus ou moins (ou tout simplement différentes) des nombreuses API et ensembles Microsoft a créé pour .Net, selon l'endroit où ils sont installés et dans quel profil. Par exemple, il y a des différentes API disponibles dans les applications de Windows Universal que dans le profil Windows « normal ». Même sous Windows, vous pourriez avoir le profil « client » vs le profil « complet ». De plus, il existe d' autres implémentations (comme Mono) qui ont leurs propres ensembles de bibliothèques.

.Net standard est une spécification pour qui fixe des bibliothèques d'API et d' assemblages doivent être disponibles. Une application écrite pour .Net 1.0 standard devrait être en mesure de compiler et exécuter avec une version du cadre, Core, Mono, etc, qui annonce un soutien pour la Collection .Net 1.0 des bibliothèques. Similaire est vrai pour .Net 1.1 standard, 1.5, 1.6, 2.0, etc. Tant que le temps d' exécution prend en charge cette version de la norme, vous pouvez compiler et exécuter là - bas.

Un projet ciblé à une version de la norme ne sera pas en mesure d'utiliser des fonctionnalités qui ne sont pas inclus dans cette révision de la norme. Cela ne signifie pas que vous ne pouvez pas prendre des dépendances sur d'autres ensembles, ou API publiées par d'autres fournisseurs (par exemple: les produits sur NuGet). Mais cela ne signifie pas que toutes les dépendances que vous prenez doivent également inclure le support pour votre version de .Net standard. .Net standard évolue rapidement, mais il est encore assez nouveau, et se soucie assez de certains des profils d'exécution plus petits, que cette limitation peut se sentir suffocante.

D'autre part, une application ciblée à la norme devrait pouvoir être utilisé dans plus de situations de déploiement, car en théorie , il peut fonctionner avec Core, Framework, Mono, etc. Pour un projet de bibliothèque de classes à la recherche d'une large diffusion, c'est une promesse attrayante . Pour un projet de bibliothèque de classes utilisée principalement à des fins internes, il ne peut pas être aussi beaucoup d'inquiétude.

.Net standard peut également être utile dans les situations où l'équipe SysAdmin est de vouloir passer de ASP.Net sous Windows à ASP.Net pour .Net de base sur Linux pour des raisons philosophiques ou économiques, mais l'équipe de développement veut continuer à travailler contre .Net cadre dans Visual studio sous Windows.

Créé 22/03/2017 à 00:42
source utilisateur

voix
3

.NET Framework et Core .NET sont les deux cadres.

Standard NET est standard (en d'autres termes, spécification).

Vous pouvez faire le projet d'exécutable (comme l'application de la console, ou une application ASP.NET) avec .NET Framework et Core .NET, mais pas avec la norme .NET.

Avec .NET standard, vous pouvez faire seul projet de bibliothèque de classes qui ne peut être exécuté de manière autonome et doit être référencé par un autre projet exécutable de base .NET ou .NET Framework.

Créé 08/08/2018 à 12:58
source utilisateur

voix
2

Une autre façon d'expliquer la différence pourrait être avec des exemples du monde réel, comme la plupart d'entre nous les mortels utiliser les outils et les cadres existants (Xamarin, Unity, etc.) pour faire le travail.

Ainsi, avec .NET Framework vous avez tous les outils .NET pour travailler avec, mais vous ne pouvez cibler des applications Windows (UWP, Winforms, ASP.NET, etc). Depuis .NET Framework est une source fermée il n'y a pas grand-chose à faire à ce sujet.

Avec Core .NET vous avez moins d'outils, mais vous pouvez cibler les principales plates-formes de bureau (Windows, Linux, Mac). Ceci est particulièrement utile dans les applications de base ASP.NET, puisque vous pouvez maintenant héberger Asp.net sous Linux (prix d'hébergement moins cher). Maintenant, depuis .NET de base était open source, il est techniquement possible de développer des bibliothèques pour d'autres plates-formes. Mais étant donné qu'il n'y a pas de cadres qui le soutiennent, je ne pense pas que ce soit une bonne idée.

Avec .NET standard, vous avez encore moins d'outils, mais vous pouvez cibler tous / la plupart des plateformes. Vous pouvez cibler les mobiles grâce à Xamarin, et vous pouvez même cibler consoles de jeux grâce à Mono / Unity.

Dans une application réelle, vous devrez peut-être utiliser tous. Par exemple, j'ai développé un point d'application de la vente qui avait l'architecture suivante:

Partagée à la fois serveur et client:

  • Une bibliothèque standard .NET qui gère les modèles de ma demande.

Comme il est une bibliothèque standard .NET, il peut être utilisé dans une autre bibliothèque.

Server Side (API Web):

  • Une norme .NET (pourrait être de base aussi bien) bibliothèque qui gère toutes les connexions de base de données.

  • Un projet de base .NET qui gère l'API Rest et utilise la bibliothèque de base de données.

Comme cela est développé dans .NET de base, je peux héberger l'application sur un serveur Linux.

Côté client (MVVM avec WPF + Xamarin.Forms Android / IOS):

  • Une bibliothèque standard .NET qui gère la connexion API client.

  • Une bibliothèque standard .NET qui gère la logique ViewModels. Utilisé dans toutes les vues.

  • Une application .NET Framework WPF qui gère les vues WPF pour une application Windows.

  • Une bibliothèque standard .NET qui gère Xamarin Forms vues.

  • Un projet Xamarin Android et IOS Xamarin.

Ainsi, vous pouvez voir qu'il ya un gros avantage ici du côté client de l'application depuis que je peux réutiliser les bibliothèques .NET standard (API client et ViewModels) et juste faire des vues sans logique pour les applications WPF, Xamarin et IOS.

Créé 10/12/2018 à 19:56
source utilisateur

voix
2

.Net standard existe principalement pour améliorer le partage de code et rendre les API disponibles dans chaque implémentation .Net plus cohérente.

Lors de la création des bibliothèques, nous pouvons avoir la cible as.Net Standard 2.0 afin que la bibliothèque créée serait compaitible avec différentes versions .Net Framework .Net, y compris Core Mono ..

Créé 15/08/2017 à 15:50
source utilisateur

voix
1

.NET standard: Pensez-y comme une grande bibliothèque standard. Lorsque vous utilisez cela comme une dépendance, vous ne pouvez faire des bibliothèques (DLLs), non executables. Une bibliothèque faite avec .NET standard comme une dépendance peut être ajouté à un Xamarin.Android, un Xamarin.iOS, un .NET Windows Core / OSX / Linux projet.

Core .NET: Pensez-y comme la continuation de l'ancien cadre .NET, juste il est opensource et certaines choses ne sont pas encore mis en œuvre et d' autres se dépréciée. Il étend la norme .NET avec des fonctions supplémentaires, mais ne fonctionne que sur les ordinateurs de bureau. Lorsque vous ajoutez cela comme une dépendance , vous pouvez faire des applications exécutables sous Windows, Linux et OSX. (Bien que la console uniquement pour l' instant, pas d' interfaces graphiques). Donc , .NET de base = .NET standard + bureau choses spécifiques.
Aussi UWP utilise et le nouveau noyau ASP.NET utilise comme une dépendance aussi.

Créé 26/12/2017 à 03:45
source utilisateur

voix
0

Espérons que cela aidera à comprendre la relation entre la surface de l' API .NET standard et d' autres plates - formes .NET . Chaque interface représente un cadre cible et les méthodes représentent des groupes d'API 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
}
}

La source

Créé 01/09/2018 à 13:28
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more