2009-04-02 5 views
2

Я пишу довольно простой инструмент для генерации кода, и мне нужна возможность конвертировать объекты MSIL (или MethodInfo) в их источник C#. Я понимаю, что Reflector отлично справляется с этим, но у него есть неприятная «особенность» в том, что он только UI.Преобразование метода в источник C# Код

Я знаю, что я мог бы просто сгенерировать строки C# напрямую, используя string.Format для вставки частей переменной, но я действительно предпочел бы иметь возможность создавать методы программно (например, делегат или объект MethodInfo), а затем передавать те методы для писателя, которые преобразуют их в C#.

Кажется немного глупым, что системные библиотеки позволяют легко перейти от исходной кодовой строки C# к скомпилированному (и исполняемому) методу во время выполнения, но невозможно перейти от объекта к исходному коду - даже для простые вещи.

Любые идеи?

ответ

0

Генераторы кода, которые я написал как часть нашего приложения, используют String.Format, и хотя я не совсем доволен String.Format (Lisp macros избили его в любое время дня), он делает все правильно. Компилятор C# в любом случае перепроверяет все ваши сгенерированные методы, поэтому вы ничего не получаете путем округления с помощью Reflection.Emit и (до сих пор неписаного) декомпилятора MSIL-to-C#.

PS: почему бы не использовать CodeDOM, если вы хотите использовать что-то тяжеловес?

+0

привет. CodeDom полезен при генерации кода, но он не поддерживает синтаксический анализ исходного кода на объект CodeDom. –

+0

@DavidDao Вы можете использовать Roslyn для этого. –

1

Этот add-in for Reflector позволяет выводить на файл, и из командной строки можно запустить Reflector. Скорее всего, это проще сделать, чтобы делать то, что вы хотите, чем катить свой декомпилятор.

Anakrino - еще один декомпилятор с опцией командной строки, но он не обновлялся с .NET 1.1. Это с открытым исходным кодом, так что вы могли бы обосновать свое решение на нем.

Смежные вопросы