Делать нативные .Net возможными? - PullRequest
2 голосов
/ 21 августа 2009

Теперь, когда Microsoft выпустила источники .Net Framework, я удивился:

Можем ли мы каким-то образом скомпилировать код .Net в собственный исполняемый файл, для запуска которого не требуется clr или jit?

Ответы [ 5 ]

4 голосов
/ 21 августа 2009

Нет, это не по нескольким причинам.

Первая проблема заключается в том, что исходный код выпущен по базовой лицензии ( Ссылка ).
Я не юрист, но я понимаю, что эта лицензия не позволяет распространять контент.

Во-вторых, он не добавляет никаких новых и полезных данных в уравнение. Программа, которая по существу объединяет исполняемый файл и все его зависимости в один и независимый исполняемый файл, выполняет операцию, очень похожую на инструмент компоновщика CPP. Это объединяет двоичный файл и все его зависимости в один исполняемый файл при отсутствии исходного кода.

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

Исходный код для .Net Framework действительно полезен, только если вы хотите написать новый компилятор, который объединяет его в одну сборку. Даже тогда вам все равно понадобится решение в стиле компоновщика, чтобы получить CLR в тот же исполняемый файл.

2 голосов
/ 21 августа 2009

Просто нет. Исходный код, который был выпущен, предназначен для фреймворка (а не all фреймворка), а не для самой среды выполнения .NET. Поэтому код, который вы можете получить от Microsoft, все еще нуждается в установке .NET для запуска и не приближает вас к нативному приложению.

1 голос
/ 21 августа 2009

Взгляните на это:

http://www.remotesoft.com/linker/intro.html

1 голос
/ 21 августа 2009

Вы имеете в виду распространение только для целей отладки определенных исходных файлов фреймворка?

Они не завершены (в частности, в них отсутствуют разделы, написанные на собственном коде, и они также включают в себя только библиотеку классов , а не саму среду выполнения).

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

0 голосов
/ 21 августа 2009

Разве это не достаточно хорошо, чтобы NGEN исполняемый файл?

...