Запуск.NET Standard бинарных файлов на разных платформах
Я понимаю, что нацеливание.NET Standard 2 означает, что фреймворки между.net core, mono и полной.net фреймворком, но я хотел бы понять, что это означает для двоичных файлов, создаваемых различными фреймворками.
Поэтому, если я создаю консольную программу для.NET Standard 2 и компилирую с использованием.NET Framework, может ли только полный.NET Framework запускать этот файл? Если они все могут запустить файлы, как бы я запустить.NET Core .dll
исполняемая консоль, использующая полный фреймворк или моно?
Итак, в основном, могут ли двоичные файлы, созданные каждой платформой (нацеленные на.NET Standard), запускаться с использованием других платформ?
1 ответ
Я полагаю, что раздел Сравнение с переносимыми библиотеками классов, вероятно, говорит это лучше всего:
.NET Standard - это замена для переносимых библиотек классов (PCL).
.NET Standard - это не среда выполнения, а механизм пересылки типов для нескольких различных сред выполнения. Поэтому в.NET Standard невозможно создать что-либо, кроме неисполняемой библиотеки классов, как это было в случае с PCL.
Это позволяет использовать библиотеку классов исполняемыми сборками, предназначенными для конкретных сред выполнения (.NET Framework, .NET Core, Xamarin.iOS, Mono и т. Д.).
Полезно думать об этом с точки зрения классов и интерфейсов. В псевдокоде.NET Standard - это интерфейс, который реализуют.NET Framework и.NET Core.
public interface INetStandard
{
// Only has API definitions
}
public class NetFramework : INetStandard
{
// .NET Framework Runtime implemented here
}
public class NetCore : INetStandard
{
// .NET Core Runtime implemented here
}
Это позволяет использовать.NET Standard либо с.NET Framework, либо с.NET Core, но сам.NET Standard не имеет среды выполнения, только набор API-интерфейсов, которые могут совместно использоваться средами выполнения. Вы можете выбрать любой из трех в своем проекте, но вы не можете выполнить.NET Standard так же, как вы можете создать экземпляр интерфейса.
К сожалению, вы не первый, кто спросил об этом, и если Microsoft не разъяснит документацию о том, что.NET Standard на самом деле не работает, вы, вероятно, не будете последним.