Class Library и .Net Framework & .Net Core & .Net Standart


#1

В Visual Studio можно создать библиотеку классов (Class Library) 3:

  • Class Library (.NET Framework)
  • Class Library (.Net Core)
  • Class Library (.NET Standard)

Какая разница между ними? Какой тип библиотеки лучше использовать и когда?


#2

Какая разница между ними?

О .Net Framework писать не буду, поскольку это самая распространённая платформа, а о .Net Core и .Net Standart скажу следующее:

  • Во первых нужно отметить их совместимость: Библиотеки, предназначенные для .NET Standard, будут работать в любой среде исполнения, совместимой со стандартом .NET, например .NET Core,.NET Framework, Mono/Xamarin. С другой стороны, библиотеки, ориентированные на .NET Core, могут работать только в среде выполнения .NET Core.

  • И конечно не нужно забывать о площади поверхности API: Стандартные библиотеки .NET поставляются со всеми в NETStandard.Library, тогда как библиотеки .NET Core поставляются со всеми в Microsoft.NETCore.App. Последняя включает около 20 дополнительных библиотек, некоторые из которых мы можем добавить вручную в нашу библиотеку .NET Standard (например, System.Threading.Thread), а некоторые из них несовместимы с стандартом .NET(например, Microsoft.NETCore.CoreCLR).

  • Кроме того, библиотеки .NET Core определяют время выполнения и поставляются с моделью приложения.

Какой тип библиотеки лучше использовать и когда?

зависит от того, что вы разрабатываете, какую совместимость ваши библиотеки должны иметь и какую площадь поверхности .NET API вы хотите

Используйте .NET Standard, если вам нужно увеличить количество приложений, которые будут совместимы с вашей библиотекой, но тем самым пожертвовав площадью поверхности .NET API.

Используйте .NET Core, когда требуется увеличить площадь поверхности .NET API, доступ к которой может получить ваша библиотека

Например, библиотека, предназначенная для .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.