.NET Standard - это просто кодификация поддерживаемых API, вроде интерфейса в коде, с .NET Framework / .NET Core / и т. Д.будучи реализациями этого интерфейса.Как и при использовании интерфейса в коде, вы можете привести любую реализацию интерфейса к интерфейсу, но тогда вы можете использовать только наименее общий знаменатель функциональности, который обеспечивает этот интерфейс.Основная идея в коде:
public interface INetStandard
{
public void StandardMethod();
}
public class NetFramework : INetStandard
{
public void StandardMethod() { ... }
public void FrameworkMethod() { ... }
}
public class NetCore : INetStandard
{
public void StandardMethod() { ... }
public void CoreMethod() { ... }
}
Ориентация на .NET Standard похожа на передачу в интерфейс.В приведенном выше коде это означает, что вы могли бы получить доступ к StandardMethod
, но вы бы не могли бы использовать FrameworkMethod
/ CoreMethod
, независимо от того, каким был фактический тип.
Что касается использования чего-то вроде библиотеки .NET Core в .NET Standard, то это не совсем то, что вы делаете.Библиотеки, такие как пакеты NuGet, о которых вы упомянули, обычно многоцелевые, например, в качестве целей используются как .NET Standard, так и .NET Core.Это фактически обещание, что библиотека, хотя и предназначена для .NET Core, не использует никаких специфичных для .NET Core API-интерфейсов.Или, если это так, он делает это таким образом, чтобы не нарушить цель .NET Standard (с помощью директив и тому подобного).В любом случае, безопасно включать в библиотеку .NET Standard, потому что она использует только те вещи, которые поддерживает .NET Standard.Хотя я не знаю конкретных случаев, но вполне возможно иметь что-то вроде пакета ASP.NET Core NuGet, который вы на самом деле не можете включить в библиотеку .NET Standard.Если он не предназначен специально для .NET Standard, то он не будет работать.
.NET Framework работает аналогично, но также является особым случаем.Поскольку существует очень много старых библиотек, ориентированных на .NET Framework, которые на самом деле полностью совместимы с .NET Standard, Visual Studio делает особый упор на то, чтобы вы могли их вставить, даже если они не предназначены специально для .NET Standard.Однако, когда вы делаете это, вы получаете предупреждение, которое служит мягким напоминанием о том, что только потому, что вам разрешено это делать, это не означает, что оно действительно сработает.Затем вы должны провести собственное тестирование, чтобы убедиться, что библиотека работает должным образом и все компилируется правильно.Таким образом, старые библиотеки не являются обязательными для всех обновлений, тем более что многие из них могут фактически не поддерживаться или быть заброшенными.
Длинная и короткая библиотека .NET Standard может действительно зависеть только от других библиотек .NET Standard.Пакеты Core, которые вы можете использовать, таковы, потому что они предназначены для .NET Standard, в дополнение к .NET Core.Библиотеки, предназначенные только для .NET Framework, допускаются из-за особого исключения и не гарантированно работают.