Как скомпилировать приложение .NET в нативный код? - PullRequest
85 голосов
/ 05 сентября 2008

Если я хочу запустить приложение .NET на компьютере, где .NET Framework недоступен; Есть ли способ скомпилировать приложение для нативного кода?

Ответы [ 12 ]

43 голосов
/ 05 сентября 2008

В Microsoft есть статья, описывающая, как можно Скомпилировать MSIL в собственный код

Вы можете использовать Ngen .

Собственный генератор изображений (Ngen.exe) это инструмент, который улучшает производительность управляемых приложений. Ngen.exe создает собственные изображения, которые файлы, содержащие скомпилированные машинный код для конкретного процессора и устанавливает их в родной образ кеш на локальном компьютере. время выполнения может использовать нативные образы из вместо этого использовать кэш (JIT) компилятор для компиляции оригинала сборка.

К сожалению, вам все еще нужны библиотеки из фреймворка для запуска вашей программы. В пакете MS .Net Framework SDK отсутствует какая-либо особенность, позволяющая собрать все необходимые файлы в один исполняемый файл

.
23 голосов
/ 05 сентября 2008

RemoteSoft создает инструмент, который компилирует приложение .NET в пакет, который может быть запущен без установленного .NET. У меня нет никакого опыта с этим:

RemoteSoft Salamander

19 голосов
/ 05 сентября 2008

Я протестировал несколько из них, и на данный момент единственным, который поддерживает .NET 3.5, а также имеет большой стек виртуализации, является Xenocode Postbuild

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

18 голосов
/ 03 апреля 2014

Microsoft объявила о выпуске .NET Native Preview , который позволит запускать приложения .NET без установленной платформы.

Взгляните: http://blogs.msdn.com/b/dotnet/archive/2014/04/02/announcing-net-native-preview.aspx

FAQ: http://msdn.microsoft.com/en-US/vstudio/dn642499.aspx

Вы можете скачать Microsoft .NET Native для VS2013 здесь: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

17 голосов
/ 17 февраля 2016

Как уже упоминалось в некоторых других ответах, вы можете использовать инструмент .NET Native для компиляции вашего приложения с собственным машинным кодом. Однако, в отличие от этих ответов, я объясню , как сделать это.

Шаги:

  1. Установите инструмент dotnet CLI (интерфейс командной строки), который является частью нового набора инструментов .NET Core. Мы будем использовать это для компиляции нашего приложения; Вы можете найти хорошую статью об этом здесь.

  2. Откройте приглашение оболочки и cd в каталог вашего приложения.

  3. Введите это:

    dotnet compile --native
    

Вот и все! Когда вы закончите, ваше приложение будет скомпилировано в один двоичный файл, например:

Native compiled .NET Core EXE

It'll be a standalone executable; no PDBs, assemblies, or config files included (hooray!).


Alternatively, if you want an even faster program, you can run this:

dotnet compile --native --cpp

That will optimize your program using the C++ code generator (as opposed to RyuJIT), so your app is even more optimized for AOT scenarios.

You can find more info on this at the dotnet CLI GitHub репо .

11 голосов
/ 05 сентября 2008

Да, используя Ngen , собственный генератор изображений. Однако есть ряд вещей, о которых вам нужно знать:

  • Вам все еще нужен CLR для запуска вашего исполняемого файла.
  • CLR не будет динамически оптимизировать ваши сборки в зависимости от среды, в которой он запущен (например, 486 против 586 против 686 и т. Д.)

В целом, стоит использовать Ngen, только если вам нужно сократить время запуска приложения.

9 голосов
/ 13 февраля 2012

можно! Тем не менее, вы ограничены .NET 1.1 (нет обобщений для вас): Моно-опережающая сборка (AOT)

Однако это означает, что компиляция действительно встроенная, поэтому вы больше не сможете развернуть одну сборку байт-кода, вам понадобится одна для каждой платформы.

Первоначально он был разработан потому, что для iPhone нет .NET или Mono, поэтому они сделали MonoTouch.

6 голосов
/ 21 апреля 2014

Вы можете сделать это, используя новую технологию прекомпиляции, названную .NET Native. Проверьте это здесь: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

В настоящее время он доступен только для приложений Магазина Windows. Он выполняет привязку одного компонента. Таким образом, библиотеки .NET Framework статически связаны с вашим приложением. Все скомпилировано в нативную, и сборки IL больше не развертываются. Приложения не работают с CLR, а урезанная оптимизированная среда выполнения, называемая Managed Runtime (Mrt.dll)

Как указано выше, NGEN использовал модель компиляции микса и полагался на IL и JIT для динамических сценариев. .NET Native не использует JIT, но поддерживает различные динамические сценарии. Авторы кода должны будут использовать Директивы времени выполнения для предоставления подсказок компилятору .NET Native в динамических сценариях, которые они хотят поддерживать.

4 голосов
/ 05 сентября 2008

Вы можете использовать ngen.exe для генерации собственного образа , но вам все равно придется распространять исходный не родной код, и для него по-прежнему нужна платформа, установленная на целевая машина.

Что на самом деле не решает твою проблему.

1 голос
/ 22 апреля 2019

2019 Ответ: Используйте dotnet / corert . Он может компилировать проекты .NET Core в отдельные .exe файлы. Нет зависимостей (кроме системных библиотек типа kernel32.dll). Бьюсь об заклад, это именно то, что нужно ОП.

На домашней странице GitHub:

Компилятор CoreRT может компилировать управляемое приложение .NET Core в собственный (специфичный для архитектуры) однофайловый исполняемый файл, который легко развертывать. Он также может создавать автономные динамические или статические библиотеки, которые могут использоваться приложениями, написанными на других языках программирования.

...