预处理C# - 检测方法

时间:2009-11-11 15:43:29

标签: c# visual-studio-2005 aop postsharp mono.cecil

我需要能够预处理大量C#文件作为项目的预建步骤,检测方法的开始,并在方法开始时,在任何现有代码之前插入生成的代码。但是,我在检测方法打开时遇到问题。我最初尝试使用正则表达式进行匹配,但结果却出现了太多的误报。

我会使用反射,但MethodInfo类不会引用原始源中的点。

编辑:我在这里要做的是支持方法的前提条件,预处理代码由方法上的属性决定。我最初的想法是,我可以查找方法的开头,然后插入生成的代码来处理前置条件。

有更好的方法吗?如果需要,我愿意创建一个Visual Studio Addin。

这是一个.NET 2.0项目。

干杯

2 个答案:

答案 0 :(得分:3)

PostSharp或Mono.Cecil将允许您通过更改生成的代码来执行此操作cleanly,而无需编写不太可能是您的核心业务的C#解析器...

没有使用PostSharp做任何后果,但是猜测它比Mono更适合实现像preconditions或AOP这样的东西。或者,您可以使用像Ninject

这样的DI容器执行AOPy操作

但当然这个想法的适用性取决于 - 除了你想在方法的开头插入代码之外,你没有说太多...

编辑:鉴于你希望做先决条件...... Code Contracts in .net 4肯定是朝这个方向发展的。

你有什么工具?有一个单独的Mono.Cecil.dll DLL出错了吗?无论哪种方式,解析器以外的东西都是工作的工具。

答案 1 :(得分:0)

我确信有一种更简单的方法,但这可能是让MGrammer进行旋转的一个很好的借口。