我需要能够预处理大量C#文件作为项目的预建步骤,检测方法的开始,并在方法开始时,在任何现有代码之前插入生成的代码。但是,我在检测方法打开时遇到问题。我最初尝试使用正则表达式进行匹配,但结果却出现了太多的误报。
我会使用反射,但MethodInfo类不会引用原始源中的点。
编辑:我在这里要做的是支持方法的前提条件,预处理代码由方法上的属性决定。我最初的想法是,我可以查找方法的开头,然后插入生成的代码来处理前置条件。
有更好的方法吗?如果需要,我愿意创建一个Visual Studio Addin。
这是一个.NET 2.0项目。
干杯
答案 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进行旋转的一个很好的借口。