【发布时间】:2011-07-12 22:40:04
【问题描述】:
StackOverflow 上的.NET 这里有很多关于AOP 的问题和答案,经常提到 PostSharp 和其他第三方产品。因此,在 .NET 和 C# 世界中似乎有相当多的 AOP 选项。但是每个都有自己的限制,在下载了有前途的 PostSharp 我在他们的文档中发现“方法必须是虚拟的”才能注入代码(编辑:参见 ChrisWue 的回答和我的评论 - 我想,虚拟约束一定是在其中一个竞争者身上)。我没有进一步调查这个陈述的准确性,但它的分类让我回到了 StackOverflow。
所以我想回答这个非常具体的问题:
我想注入简单“如果(某些条件)Console.WriteLine”样式代码到每个方法和属性(静态,密封,内部,虚拟,非-virtual,没关系)在我没有自定义注释的项目中,以便在运行时动态测试我的软件。此注入代码不应保留在发布版本中,它仅用于开发期间的动态测试(与线程相关)。
最简单的方法是什么?我偶然发现了Mono.Cecil,它看起来很理想,只是您似乎必须编写要在 IL 中注入的代码。这不是一个大问题,使用 Mono.Cecil 很容易获得用 C# 编写的 IL 版本的代码。但是,如果有更简单的东西,最好是内置在 .NET 中(我仍在使用 .NET 3.5),我想知道。 [更新:如果建议的工具不是 .NET Framework 的一部分,最好是开源的,例如 Mono.Cecil,或者免费提供]
【问题讨论】:
-
您是否有机会升级您的解决方案并拥有更现代的解决方案? (例如,利用 Fody 或其扩展之一的东西?)
标签: c# .net aop code-injection