Генерация IL для платформы .Net - PullRequest
4 голосов
/ 01 июня 2011

Я пишу небольшой компилятор на C # и планирую сгенерировать инструкции IL для платформы .Net, используя System.Reflection.Emit. Мой вопрос, желательно использовать System.Reflection.Emit для генерации IL для производственных компиляторов.

Если нецелесообразно использовать System.Reflection.Emit для генерации IL для производственных компиляторов, есть ли у нас альтернативные библиотеки / инструменты для этой цели?

Ответы [ 4 ]

7 голосов
/ 01 июня 2011

System.Reflection.Emit отлично подходит для производственных компиляторов, хотя вы можете взглянуть на mono-cecil .

2 голосов
/ 01 июня 2011

Хотя System.Reflection.Emit давайте сделаем генерацию кода, это самый старый из API генерации кода в .NET Framework, и он требует понимания IL. Деревья выражений, представленные в .NET 3.5 и расширенные в .NET 4.0 (не могут создавать новые типы), но их можно использовать для сборки полных тел методов.

2 голосов
/ 01 июня 2011

Вот статья в блоге, описывающая некоторые проблемы с Reflection.Emit, которые, вероятно, не являются серьезными ограничениями для вашего проекта, но вы можете быть судьей:

Если эти проблемы вас не беспокоят, вы можете использовать этот вопрос SO для советов по генерации с использованием Reflection.Emit и записи сборки на диск:

1 голос
/ 01 июня 2011

Reflection.Emit это обычно в порядке, но IKVM.Reflection.Emit (доступно из Mono) может иметь больше опций, если генерируемая вами сборка не для той же платформы (т.е. вы хотите построить dll silverlightот вашего компилятора, который написан на "full" .NET).

...