Ищете способ манипулирования .Net CIL во время выполнения - PullRequest
6 голосов
/ 28 апреля 2011

В Java мы использовали аргумент javaagent и ASM (http://asm.ow2.org/) утилиты для изменения байтового кода во время выполнения / загрузки в память загрузчиком классов. (Также называемый динамическим добавлением вызова метода в метод в классе).

Один из примеров - удаление всех вызовов Log4j для ускорения работы приложения (http://surguy.net/articles/removing-log-messages.xml).

. Я пытаюсь выяснить, как выполнить этот же процесс во время выполнения с C # / .Net.Я видел, что вы можете манипулировать CIL для .Net, но я не нашел пример этого во время выполнения.

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

Ответы [ 3 ]

2 голосов
/ 28 апреля 2011

Я никогда не использовал Mono.Cecil для генерации динамического кода (хотя это очень облегчает вашу жизнь, если вы хотите использовать инструментальные сборки).

В .Net, если вы хотите сгенерировать код, вы можете использовать System.CodeDom и System.Reflection.Emit . Один конкретный полезный класс, который позволяет динамически внедрять методы, - это DynamicMethod .

1 голос
/ 28 апреля 2011

Ознакомьтесь с новыми функциями в .net 4, я думаю, что большая часть того, что вы ищете, находится в пространстве имен System.Dynamic .

Проверьте это сообщение на DuckTyping

0 голосов
/ 28 апреля 2011

Прошло много времени с тех пор, как я посмотрел на него (я в значительной степени Java-кролик), но я думаю, что в проекте Mono было что-то под названием Cecil, которое по крайней мере кое-что сделало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...