Есть ли библиотека, которая может декомпилировать метод в дерево выражений с поддержкой CLR 4.0? - PullRequest
5 голосов
/ 21 февраля 2010

В предыдущих вопросах задавался вопрос, можно ли превратить скомпилированные делегаты в деревья выражений, например:

Вменяемые ответы в то время были:

  • Это возможно, но очень сложно и нет стандартного библиотечного решения.
  • Используйте отражатель!

Но, к счастью, есть некоторые очень безумные / безумно великие люди, которым нравятся вещи с обратной инженерией, и они облегчают сложные дела для всех нас.

Ясно, что можно декомпилировать IL в C #, как это делает Reflector, и поэтому вы можете в принципе вместо целевых деревьев выражений CLR 4.0 с поддержкой всех типов операторов. Это интересно, потому что не имеет значения, если встроенная в компилятор специальная поддержка Expression<> lambdas никогда не будет расширена для поддержки построения деревьев выражений операторов в компиляторе. Решение библиотеки может заполнить пробел. Тогда у нас будет высокоуровневая отправная точка для написания аспектно-ориентированных манипуляций с кодом без необходимости связываться с необработанным IL.

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

Так кто-нибудь закончил эту работу или очень далеко продвинулся?

Примечание: CLR 4.0 теперь выпущен. Время для другого взгляда.

Ответы [ 2 ]

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

Я сделал библиотеку, которая поддерживает деревья выражений .NET 3.5:
https://github.com/ashmind/expressive

Я пытался создать внутренний API, чтобы добавить поддержку .NET 4.0 было не сложно.
Вы можете добавить или изменить шаги в реализации IPipeline для достижения именно этого.

Одна вещь, которую я не сделал и которая будет трудной, это поддержка циклов.

0 голосов
/ 12 июля 2010

На основании ответа я собираюсь ответить на мой вопрос:

номер

Хотя, конечно, если кто-то придумает лучший ответ (или я его найду), я обновлю.

...