Возможно ли преобразовать один файл C # в сборку IL?

#c# #il #ilasm

#c# #il #ilasm

Вопрос:

Учитывая один исходный файл c #, я хотел бы вывести IL (не собранный) из этого одного файла, чтобы позже я мог передавать каждый файл ‘.il’ в ilasm для создания сборок, возможно ли это?

Комментарии:

1. Возможно, если вы дадите немного больше информации, люди смогут дать вам лучшие ответы. Чего именно вы надеетесь достичь и почему?

Ответ №1:

Это не дает прямого ответа на ваш вопрос, но почему бы не скомпилировать, затем использовать ildasm и получить соответствующие разделы?

Комментарии:

1. Поскольку мне нужен промежуточный этап, я изучаю некоторые идеи для распределенного компилятора для c#

2. зачем вам нужна распределенная компиляция для c#

3. @IanNorton: Если компиляция вашего кода на C # занимает более 2-3 минут, вам необходимо купить новый компьютер. Все, что было сделано за последние 10 лет, компилирует код достаточно быстро, чтобы не требовалась распределенная компиляция. В любом случае, вам нужен компилятор для преобразования кода C # в IL. Тот, который поставляется с .NET SDK, довольно хорош…

4. Генерация IL в качестве промежуточного шага была бы медленнее, чем просто компиляция в первую очередь. Формат IL-as-text не является особенно компактным представлением, поэтому вы потратили бы много дополнительного времени на написание больших файлов .il (намного больше, чем исходные файлы .cs), их чтение обратно, их синтаксический анализ и повторное построение тех же таблиц символов, которые компилятор C # уже однажды создавал. Вам было бы лучше использовать пользовательский двоичный промежуточный формат, такой как файлы Delphi .dcu.

Ответ №2:

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

Короткий ответ, получение текстового IL из компилятора C # невозможно на .Net и в любом случае, особой пользы от этого нет.