Компиляция приложений с помощью машинного кода .NET

.NET Native — это технология предварительной компиляции, предназначенная для создания и развертывания приложений UWP. .NET Native входит в состав Visual Studio 2015 и более поздних версий. Эта технология автоматически компилирует версию выпуска приложений UWP, написанных в формате управляемого кода (C# или Visual Basic), в машинный код.

Как правило, приложения .NET компилируются в промежуточный язык (IL). Во время выполнения JIT-компилятор преобразует инструкции IL в машинный код. Но .NET Native компилирует приложения UWP непосредственно в машинный код. Для разработчиков это означает:

  • Для приложений обеспечивается производительность на уровне машинного кода. Как правило, производительность будет значительно выше, чем если бы код сначала компилировался в промежуточный язык, а затем в машинный код JIT-компилятором.

  • Можно продолжить программировать в C# или Visual Basic.

  • Вы можете продолжать использовать ресурсы, предоставляемые .NET Framework, включая библиотеку классов, автоматическое управление памятью и сбор мусора, а также обработку исключений.

Пользователям ваших приложений .NET Native предоставляет следующие преимущества:

  • ускоренное выполнение для большинства приложений и сценариев;

  • ускоренная загрузка для большинства приложений и сценариев;

  • низкая стоимость развертывания и обновления;

  • оптимизированное использование памяти приложением.

Но возможности .NET Native не ограничиваются компиляцией в машинный код. Он преобразует способ построения и выполнения приложений на платформе .NET Framework. В частности:

  • Во время предварительной компиляции необходимые компоненты .NET Framework статически связываются с приложением. Это позволяет приложению работать с локальными библиотеками .NET Framework, а компилятору — выполнять глобальный анализ для повышения производительности. В результате приложения постоянно запускаются быстрее даже после обновлений платформы .NET Framework.

  • Среда выполнения .NET Native оптимизирована для статической предварительной компиляции, и практически во всех случаях обеспечивает превосходную производительность. В то же время она сохраняет основные функции отражения, которые разработчики считают такими полезными.

  • .NET Native использует ту же серверную часть, что и компилятор C++, который оптимизирован для статических сценариев предварительной компиляции.

.NET Native может обеспечить производительность на уровне C++ для разработчиков управляемого кода, так как эта технология использует те же или аналогичные средства, что и C++, как показано в этой таблице.

Компонент .NET Native C++
Библиотеки .NET Framework и среда выполнения Windows Win32 + среда выполнения Windows
Компилятор Оптимизирующий компилятор UTC Оптимизирующий компилятор UTC
Развернут Готов к запуску двоичных файлов Готов к запуску двоичных файлов (ASM)
Параметры выполнения MRT.dll (минимальной среды CLR) CRT.dll (среда выполнения C)

Для приложений UWP в Microsoft Store передаются двоичные файлы компиляции кода .NET Native в пакетах приложений (файлы MSIX или APPX).