J'ai lu la différence entre .NET Standard et .NET Core, mais je ne sais vraiment pas quelle est la différence, ni quand choisir un projet de bibliothèque .NET Standard et quand choisir un projet de bibliothèque .NET Core.
J'ai lu que .NET Standard est de s'assurer qu'un ensemble d'API est toujours disponible, quelle que soit la plateforme utilisée (tant que cette plateforme est compatible avec la version .NET Standard que j'ai choisie). Si je ne me trompe pas, cela signifie que je peux créer une bibliothèque de classes de .NET Standard, puis l'utiliser sur n'importe quelle plate-forme compatible avec la version .NET Standard que j'ai choisie.
Avec .NET Core, j'ai lu qu'il est également destiné à une utilisation multiplateforme, donc si je choisis une bibliothèque .NET Core, il semble que je puisse également l'utiliser sur de nombreuses plates-formes, tout comme .NET Standard.
Donc à la fin, je ne vois pas la différence. Quand devrais-je utiliser quoi? Quelle est la différence entre eux?
la source
Réponses:
Je vais essayer de clarifier davantage vos doutes et d'étendre la réponse de Jon Skeet.
.NET Standard est une spécification , donc une bibliothèque compilée pour une version spécifique de .NET Standard peut être utilisée dans différentes implémentations de .NET Standard.
Comme dit dans mon autre commentaire, une bonne analogie pour la relation entre .NET Standard et les autres implémentations .NET Standard (.NET Core, .NET Framework, etc.) est cet essentiel de David Fowler : les versions .NET Standard le sont
Interfaces
, tandis que les cadres sont implémentations de ces interfaces.Ce diagramme simplifié peut aider à comprendre cette relation:
Tout ciblage
NetCore10
a accès à desINetStandard15
API et àNetCore10
des API spécifiques (telles queDotNetHostPolicy
).Bien sûr, cette bibliothèque ne peut pas être utilisée dans différentes
INetStandard15
implémentations (NetCore10
n'est pas convertible enNetFramework462
ouMono46
).Si vous, au contraire, l' accès nécessaire uniquement aux
INetStandard15
API (et cible spécification à la place d'un cadre de béton) votre bibliothèque peut être utilisé par tout cadre qui met en œuvre (NetCore10
,NetFramework462
, etc.)Remarque: dans l'analogie d'origine, David Fowler a utilisé des interfaces pour les versions .NET Standard et les implémentations de frameworks. Je crois que l'utilisation d'interfaces et de classes est, au contraire, plus intuitive et représente mieux la relation entre les spécifications et les implémentations concrètes.
la source
.NET Core est une implémentation de .NET Standard. Il est disponible sur plusieurs systèmes d'exploitation, mais ce n'est pas la même chose - il existe également d'autres implémentations de .NET Standard.
Donc, si vous créez une bibliothèque .NET Core, elle aura accès aux éléments qui sont implémentés dans .NET Core, mais ne font pas partie de .NET Standard, et votre bibliothèque ne sera pas compatible avec d' autres implémentations de .NET Standard, tels que Xamarin, Tizen, framework de bureau .NET complet, etc.
En bref: pour obtenir une portabilité maximale, faites de votre bibliothèque une cible .NET Standard.
la source
INetStandard16
). .NET Core 1.0 et Mono 4.6 implémentent tous les deuxINetStandard16
. Vous ne pouvez pas convertir .Net Core 1.0 en Mono 4.6 (et vice-versa), mais tout ce qui utiliseINetStandard16
fonctionnera sur les deux. (crédits à David Fowler )La bibliothèque de classes .NET Core est essentiellement un sous-ensemble de la bibliothèque .NET Framework, qui contient juste moins d'API. Le fait de s'en tenir à la bibliothèque de classes .NET Core rend difficile le partage de code entre les exécutions. Ce code peut ne pas fonctionner pour un runtime différent (Mono pour Xamarin), car il n'a pas l'API dont vous avez besoin. Pour résoudre ce problème, il existe .NET Standard, qui n'est qu'un ensemble de spécifications qui vous indique quelles API vous pouvez utiliser . L'objectif principal de .NET Standard est de partager du code entre les runtimes. Et il est important que cette spécification soit implémentée par tous les runtimes. (.NET Framework, .NET Core et Mono pour Xamarin).
Donc, si vous êtes sûr que vous n'utiliserez votre bibliothèque que pour des projets .NET Core, vous pouvez ignorer .NET Standard, mais s'il y a même une toute petite chance que votre code soit utilisé par .NET Framework ou Mono pour Xamarin, alors c'est mieux s'en tenir à la norme .NET
Notez également que les versions supérieures de .NET Standard contiennent plus d'API, mais les versions inférieures sont prises en charge par davantage de plates-formes. Par conséquent, si vous créez une bibliothèque .NET Standard que vous souhaitez partager entre les exécutions, ciblez la version la plus basse possible , ce qui vous aide à atteindre le plus de plates-formes. Par exemple, si vous souhaitez exécuter sur .NET Framework 4.5 et .NET Core 1.0, la version .NET Standard la plus élevée que vous pouvez utiliser est .NET Standard 1.1. Reportez-vous à ce grand tableau de la documentation pour plus d'informations à ce sujet.
PS: Aussi, si vous souhaitez convertir votre bibliothèque en .NET Standard, l'analyseur de portabilité .NET pourrait vous aider.
la source
.NET Standard est une spécification des API .NET destinées à être disponibles sur les implémentations .NET. Cela permet de définir un ensemble uniforme d'API BCL pour toutes les implémentations .NET.
.NET Core est l'une de ces implémentations de .NET Standard. .NET Framework est une autre implémentation de .NET Standard.
Image du blog .NET
La réponse de Federicos vous donne un aperçu graphique de l'évolution de chaque framework avec les versions. Jetez un œil au diagramme ci-dessous de Microsoft Docs .
la source
Ce qui précède, ainsi qu'une explication très claire de la plupart des éléments abordés dans cette question, peuvent être trouvés dans l'article extrêmement utile suivant de Microsoft (MSDN - septembre 2017): .NET Standard - Démystifier .NET Core et .NET Standard
la source
Voulez-vous dire .NET Framework? Parce que .NET standard est une implémentation, telle que .NET Framework, .NET Core et Xamarin.
J'adore .NET Core car nous pouvons l'héberger sur Linux (utiliser nginx dans mon expérience). Il est différent du framework .NET, que vous ne pouvez héberger que sur IIS. Vous pouvez considérer le budget d'hébergement dans ce cas (car le serveur Windows est cher pour moi).
Dans la perspective de l'environnement de développement , le noyau .Net est léger. Ainsi, vous pouvez utiliser VSCode, Sublime, pour IDE (pas seulement Visual Studio).
la source
En termes simples, la norme .NET est utilisée pour écrire des projets de bibliothèque de classes qui se compilent en DLL. .NET Core peut être utilisé pour développer des applications Web réelles qui peuvent s'exécuter sur tous les systèmes d'exploitation (Windows, Linux, MacOS). (Dans .NET Core 3, Microsoft a fourni la fonctionnalité pour développer des applications de bureau à l'aide de WPF, mais jusqu'à présent, ces applications ne seront pas multiplateformes et ne fonctionneront que sur le système Windows. À l'avenir, Microsoft pourrait également les rendre multiplateformes). Les bibliothèques / DLL peuvent être utilisées dans toute application utilisant .NET (.NET Framework, .NET Core), ce qui signifie que vous pouvez utiliser la norme .NET avec .NET Framework et .NET Core.
la source