Quand faut-il utiliser l'un plutôt que l'autre ?
La décision est un compromis entre la compatibilité et l'accès aux API.
Utilisez une bibliothèque .NET Standard lorsque vous souhaitez augmenter le nombre d'applications compatibles avec votre bibliothèque et que vous acceptez une diminution de la surface de l'API .NET à laquelle votre bibliothèque peut accéder.
Utilisez une bibliothèque .NET Core lorsque vous souhaitez augmenter la surface de l'API .NET à laquelle votre bibliothèque peut accéder et que vous acceptez que seules les applications .NET Core soient compatibles avec votre bibliothèque.
Par exemple, une bibliothèque qui cible la norme .NET 1.3 sera compatible avec qui ciblent .NET Framework 4.6, .NET Core 1.0, Universal Windows Platform 10.0 et toute autre plateforme prenant en charge la norme .NET 1.3. La bibliothèque n'aura cependant pas accès à certaines parties de l'API .NET. Par exemple, la bibliothèque Microsoft.NETCore.CoreCLR
est compatible avec .NET Core mais pas avec .NET Standard.
Quelle est la différence entre Class Library (.NET Standard) et Class Library (.NET Core) ?
La section sur les cadres basés sur des paquets décrit la différence.
Compatibilité : Les bibliothèques qui ciblent la norme .NET s'exécuteront sur tout moteur d'exécution conforme à la norme .NET, comme .NET Core, .NET Framework, Mono/Xamarin. En revanche, les bibliothèques qui ciblent .NET Core ne peuvent s'exécuter que sur le moteur d'exécution .NET Core.
Surface de l'API : les bibliothèques .NET standard sont livrées avec tout ce qu'il faut dans le cadre de l'API. NETStandard.Library
alors que les bibliothèques .NET Core sont livrées avec tout ce qu'il faut dans Microsoft.NETCore.App
. Cette dernière comprend environ 20 bibliothèques supplémentaires, dont certaines peuvent être ajoutées manuellement à notre bibliothèque standard .NET (telles que System.Threading.Thread
) et dont certaines ne sont pas compatibles avec la norme .NET (telles que Microsoft.NETCore.CoreCLR
).
De plus, les bibliothèques .NET Core spécifient un temps d'exécution et sont accompagnées d'un modèle d'application. C'est important, par exemple, pour rendre les bibliothèques de classes de tests unitaires exécutables.
Pourquoi les deux existent-ils ?
Si l'on ignore un instant les bibliothèques, la raison d'être de la norme .NET est la portabilité ; elle définit un ensemble d'API que les plateformes .NET acceptent de mettre en œuvre. Toute plateforme qui met en œuvre 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èque .NET Standard existent pour s'exécuter sur plusieurs runtimes (au détriment de la surface de l'API). À l'inverse, les modèles de bibliothèque .NET Core permettent d'accéder à une plus grande surface d'API (au détriment de la compatibilité) et de spécifier une plate-forme sur laquelle construire un exécutable.