Ответ 1
Отвечая на ваш вопрос по-другому: библиотека должна ориентироваться на среды, которые требуется SDK. Если для SDK не требуется использовать netstandard
(или до .NET Core RC2 dotnet
).
-
dnxcore50
DNX SDK, работающий на CoreCLR/CoreFx ( устаревший, вместо этого используйтеnetcoreapp1.0
). -
dnx451
DNX SDK, работающий на .Net 4.5.1 (Desktop CLR/Full BCL и FCL) ( устаревший, вместо этого используйтеnet451
). -
net46
.Net Framework 4.6 SDK работает на настольных CLR/Full BCL и FCL. -
uap10.0
UWP Windows 10 SDK, работающий на .Net Native/CoreFx. -
netcoreapp1.0
.NET Core 1.0 SDK, работающий на CoreCLR/CoreFx. -
netstandard1.5
(RC2,dotnet
до) любой чистый IL-код, который объявляет свои зависимости (библиотеки System.Runtime(основанные) вместо контрактов PCL). Рамочные зависимости доступны для .Net 4.5.x и далее,.NET Core или UWP (библиотека System.Runtime, установленная в разных версиях). Поскольку с RC2dotnet
устарел, используйтеnetstandard
вместо этого. -
netstandard2.0
(.NET Core 2.0; ~ JUN 2017) любой чистый IL-код, который полагается исключительно на набор функцийnetstandard.dll
, который все платформы (.NET Core,.NET Framework, Xamarin, Mono, Unity3D) должны реализовать (или выбросить NotImplementedException).netstandard2.x
представляет собой примерно библиотеку BCL.NET Framework (без компонентов FCL, таких как WMI, WinForms, WPF, WCF, WWF,...). Благодаря совместимым прокладкам большинство существующих пакетов NuGet будут автоматическиnetstandard2.0
.
Итак, если ваша библиотека имеет только некоторые алгоритмы или не относится к платформе, используйте netstandard
/dotnet
. Если какая-либо из ваших зависимостей ограничена, эта зависимость будет распространяться до приложения (например, DNX, UWP,.Net46), которое использует его.
Я могу выделить только Малахи в серии статей Орена. (он просто написал новый: https://oren.codes/2015/07/29/targeting-net-core/ в той же теме).
ps: dotnet
/netstandard
не является конкретным временем выполнения, это абстракция. Это цель, которая в этом случае даже не указывает время выполнения, а вместо этого говорит: все, что интерпретирует ИЛ, правильно идет. Например, dnxcore5
- это цель, которая определяет SDK (DNX), который имеет определенную среду выполнения (CoreCLR). В этом случае вы можете сделать дополнительные предположения относительно поведения во время выполнения (например, использование JIT, доступность реализации x-plat и т.д.).
pps: помните, что имя dotnet
было преобразовано в термин netstandard
с предстоящей версией RC2. Кроме того, полный пакет DNX SDK был разделен между командами .NET Core и ASP.NET. Таким образом, прокси-сервер для .NET Core (CoreCLR/CoreFx) составляет netcoreapp1.0
, а 99% стека ASP.NET - это просто библиотеки с netstandard1.5
. Прозвища DNX (dnx451
и dnxcore50
), где устарели. При запуске ASP.NET Core на .NET Framework (вместо .NET Core) используйте net451
. Heavy read для деталей: https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md
ppps: постоянно помните, что концепция контрактов на основе зависимостей netstandard1.x
не была доработана, но была изменена на один (огромный) стандартный контракт (32k APIs; netstandard2.0
), который должен быть реализован всеми платформами, включая предстоящий .NET Core 2.0. Это изменение имеет то преимущество, что большая часть существующей экосистемы пакета NuGet (который ссылается на mscorlib
и друзей) может быть интегрирован в пакеты netstandard2.0
с использованием промежуточных прокладок совместимости.