Когда мы должны использовать один над другим?
Решение - это компромисс между совместимостью и доступом к API.
Используйте библиотеку .NET Standard, когда вы хотите увеличить количество приложений, которые будут совместимы с вашей библиотекой, и у вас все в порядке с уменьшением площади поверхности .NET API, к которой ваша библиотека может получить доступ.
Используйте библиотеку .NET Core, когда вы хотите увеличить площадь поверхности .NET API, к которой ваша библиотека может получить доступ, и вы можете позволить совместимым только приложениям .NET Core с вашей библиотекой.
Например, библиотека, ориентированная на .NET Standard 1.3, будет совместима с приложениями, ориентированными на .NET Framework 4.6, .NET Core 1.0, универсальную платформу Windows 10.0 и любую другую платформу, поддерживающую .NET Standard 1.3. Однако библиотека не будет иметь доступа к некоторым частям .NET API. Например, Microsoft.NETCore.CoreCLR
пакет совместим с .NET Core, но не с .NET Standard.
В чем разница между библиотекой классов (.NET Standard) и библиотекой классов (.NET Core)?
Раздел Основанные на пакетах разделы описывает разницу.
Совместимость. Библиотеки, ориентированные на .NET Standard, будут работать в любой среде, совместимой с .NET Standard, например .NET Core, .NET Framework, Mono / Xamarin. С другой стороны, библиотеки, предназначенные для .NET Core, могут работать только в среде выполнения .NET Core.
Площадь поверхности API: библиотеки .NET Standard поставляются со всем, в NETStandard.Library
то время как библиотеки .NET Core поставляются со всем Microsoft.NETCore.App
. Последняя включает в себя около 20 дополнительных библиотек, некоторые из которых мы можем добавить вручную в нашу библиотеку .NET Standard (например, System.Threading.Thread
), а некоторые из них не совместимы с .NET Standard (например,Microsoft.NETCore.CoreCLR
).
Кроме того, библиотеки .NET Core определяют среду выполнения и поставляются с моделью приложения. Важно, например, сделать библиотеки классов модульного теста работоспособными.
Почему оба существуют?
На мгновение игнорируя библиотеки, причина существования .NET Standard - в переносимости; он определяет набор API, которые платформы .NET соглашаются реализовать. Любая платформа, реализующая стандарт .NET, совместима с библиотеками, ориентированными на этот стандарт .NET. Одной из таких совместимых платформ является .NET Core.
Возвращаясь к библиотекам, шаблоны библиотек .NET Standard существуют для работы в разных средах исполнения (за счет площади поверхности API). С другой стороны, шаблоны библиотеки .NET Core существуют для доступа к большей площади поверхности API (за счет совместимости) и для определения платформы, на которой можно создать исполняемый файл.
Вот интерактивная матрица, которая показывает, какой стандарт .NET поддерживает какие реализации .NET и сколько доступно площади поверхности API.