Можно ли скомпилировать код .NET IL в машинный код? - PullRequest
29 голосов
/ 26 сентября 2008

Я хотел бы распространять свои программы .NET без .NET Framework. Можно ли скомпилировать программу .NET в машинный код?

Ответы [ 12 ]

20 голосов
/ 26 сентября 2008

Да, вы можете прекомпилировать с помощью Ngen.exe, однако это не снимает зависимость от CLR.

Вы по-прежнему должны также отправлять сборки IL, единственное преимущество Ngen в том, что ваше приложение может запускаться без вызова JIT, так что вы получаете действительно быстрое время запуска.

Согласно CLR Via C #:

Кроме того, сборки, предварительно скомпилированные с использованием Ngen обычно медленнее, чем JIT сборки, потому что JIT-компилятор можно оптимизировать до целевой машины (32-битный? 64-битный? Специальные регистры? и т.д.), в то время как NGEN будет просто производить базовый сборник.

EDIT:

Существует некоторая дискуссия по поводу вышеуказанной информации от CLR через C #, поскольку некоторые говорят, что вам необходимо запускать Ngen на целевой машине только в процессе установки.

20 голосов
/ 26 сентября 2008

Remotesoft имеет один: Salamander .NET Linker

Хотя у меня нет никакого опыта с этим.

7 голосов
/ 26 сентября 2008

Есть некоторые сторонние инструменты, которые делают это, например,

5 голосов
/ 26 сентября 2008

Другим (дорогим и проприетарным, лицензией от 1599 долларов) продуктом, который может это сделать, является Xenocode Postbuild . Хотя сам не использовал его, так как он стоил около валового национального продукта маленькой африканской страны и всего ...

3 голосов
/ 01 мая 2014

Да, теперь вы можете! Недавно Microsoft объявила о .NET Native , технологии, которая компилирует ваше приложение с .NET Native runtime (они называют его MRT) в один двоичный файл (фактически один исполняемый файл и одну динамическую библиотеку).

Смотрите ссылки: http://blogs.msdn.com/b/dotnet/archive/2014/04/02/announcing-net-native-preview.aspx http://blogs.msdn.com/b/dotnet/archive/2014/04/24/dotnetnative-performance.aspx

3 голосов
/ 26 сентября 2008

Можно ли скомпилировать код .NET IL к машинному коду?

Да, но .NET Framework делает это за вас во время выполнения (по умолчанию) или во время установки (ngen). Среди прочих причин этот IL -> машинный код выполняется отдельно на каждой машине установки, поэтому его можно оптимизировать для этой конкретной машины.

Я хотел бы распространять свой .NET программы без .NET Framework. Можно ли скомпилировать .NET запрограммировать на машинный код?

Нет, для всех намерений и целей вы не можете сделать это. Обходные пути сторонних производителей могут работать в некоторых сценариях, но к тому времени я больше не буду считать их «управляемым кодом» или «.NET».

2 голосов
/ 10 февраля 2009

Для компиляции есть IL2CPU .

1 голос
/ 10 февраля 2009

Посмотрите на проект MONO: команда mono с опцией --aot. http://www.mono -project.com / АОТ

1 голос
/ 26 сентября 2008

Если вы просто обеспокоены размером развертывания Framework, вы можете прочитать this .

1 голос
/ 26 сентября 2008

Я думаю, что вы не должны: это задача JIT-компилятора.

Однако вы можете использовать ClickOnce или установщик Windows, чтобы развернуть его, чтобы отсутствующая платформа не была такой большой проблемой: вы могли бы сказать установщику, чтобы загрузить Framework и установить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...