Запуск.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 на самом деле не работает, вы, вероятно, не будете последним.

Другие вопросы по тегам