Вопрос

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

Это было полезно?

Решение

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

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

Согласно CLR через С#:

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

РЕДАКТИРОВАТЬ:

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

Другие советы

У Remotesoft есть один:Саламандра .NET-линкер

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

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

Другой (дорогой и проприетарный продукт, стоимость лицензии начинается от 1599 долларов США), который может это сделать, — Постбилд ксенокода.Хотя сам я им не пользовался, поскольку его стоимость равна валовому национальному продукту небольшой африканской страны и все такое...

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

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

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

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

Да, теперь вы можете!Недавно Microsoft объявила .NET родной, часть технологии, которая компилирует ваше приложение с помощью среды выполнения .NET Native (они называют ее 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

Есть IL2CPU для части компиляции.

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top