Преобразование метода в исходный код C # - PullRequest
2 голосов
/ 02 апреля 2009

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

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

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

Есть идеи?

Ответы [ 2 ]

1 голос
/ 02 апреля 2009

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

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

0 голосов
/ 02 апреля 2009

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

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

...