Я пытаюсь написать свою игрушку My Toy Language -> MSIL-компилятор, чтобы лучше понять, как работают компиляторы. Я получил парсинг и лексирование, я построил деревья выражений и использовал API дерева выражений System.Linq.Expressionions, у меня есть рабочий интерпретатор. Теперь я хотел бы испустить некоторые реальные сборки MSIL.Связывание дерева выражений .NET с новой сборкой
Проблема в том, что я не могу понять, как на самом деле построить эти сборки. Класс MethodBuilder принимает только примитивные тела метода MSIL, поэтому мне нужно получить сырую MSIL моего дерева выражений. Вызов Expression.Compile() возвращает рабочего делегата, но я не могу получить его базовый MSIL. Вызов MethodInfo.GetMethodBody() вызывает исключение InvalidOperationException, поскольку он не реализован в этом конкретном дочернем классе.
Как связать делегата с новой сборкой?
Имейте в виду, что этот метод имеет некоторые ограничения, такие как невозможность скомпилировать нестатические методы. –
@ 280Z28: К счастью, My Toy Language не является объектно-ориентированным, так что это не проблема. –
Можете ли вы объяснить, как получить соответствующий 'MethodBuilder' - я понимаю, что это было давно :) –