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

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

Ответ 1

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

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

В соответствии с CLR Via С#:

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

EDIT:

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

Ответ 2

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

У меня нет опыта с ним, хотя.

Ответ 4

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

Ответ 5

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

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

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

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

Ответ 6

Да, теперь ты можешь! Недавно 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

Ответ 7

Для части компиляции IL2CPU.

Ответ 8

Я не думаю, что это возможно. Вы можете сделать предварительно собранную сборку, но вам все равно нужна фреймворк.

Ответ 9

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

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

Ответ 10

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

Ответ 12

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