Самый простой способ внедрения кода во все методы и свойства, у которых нет настраиваемого атрибута

Есть много вопросов и ответов по AOP в .NET здесь, в Stack Overflow, часто упоминается PostSharp и другие сторонние продукты. Таким образом, кажется, что в мире .NET и C # существует довольно много вариантов АОП. Но у каждого из них есть свои ограничения, и после загрузки многообещающего PostSharp я обнаружил в их документации, что «методы должны быть виртуальными», чтобы иметь возможность вводить код (редактировать: см. Ответ ChrisWue и мой комментарий - виртуальное ограничение должно было быть на одного из претендентов, я полагаю). Я больше не исследовал точность этого утверждения, но его категоричность заставила меня вернуться к Stack Overflow.

Итак, я хотел бы получить ответ на этот очень конкретный вопрос:

Я хочу ] добавить простой код в стиле «if (some-condition) Console.WriteLine» в каждый метод и свойство (статический, запечатанный, внутренний, виртуальный, не виртуальный, не имеет значения) в моем проекте, не имеющем специальной аннотации , для динамического тестирования моего программного обеспечения во время выполнения. Этот внедренный код не должен оставаться в сборке релиза, он предназначен только для динамического тестирования (связанного с потоками) во время разработки.

Какой самый простой способ сделать это? Я наткнулся на Mono.Cecil , который выглядит идеально, за исключением того, что вам, кажется, нужно писать код, который вы хотите внедрить, на IL. Это не большая проблема, легко использовать Mono.Cecil для получения IL-версии кода, написанного на C #. Но тем не менее, если бы было что-то попроще, в идеале даже встроенное в .NET (я все еще использую .NET 3.5), я бы хотел знать. [Обновление: если предлагаемый инструмент не является частью .NET Framework, было бы неплохо, если бы он был с открытым исходным кодом, например Mono.Cecil, или свободно доступным]

9
задан Eugene Beresovsky 28 October 2013 в 23:13
поделиться