c# - 预处理 C# - 检测方法

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

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

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

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

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

这是一个 .NET 2.0 项目。

干杯

最佳答案

PostSharp 或 Mono.Cecil会让你这样做cleanly通过更改生成的代码而不编写 C# 解析器,这不太可能成为您的核心业务...

还没有使用 PostSharp 做过任何重要的事情,但猜测它比 Mono 更适合实现先决条件或 AOP 之类的东西。或者,您可以使用 DI 容器执行 AOPy 操作,如 Ninject

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

编辑:根据您希望做的先决条件... Code Contracts in .net 4肯定是在那个方向。

你有什么工具?只提供一个 Mono.Cecil.dll DLL 有什么问题吗?无论哪种方式,解析器以外的工具都是完成这项工作的工具。

关于c# - 预处理 C# - 检测方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1716040/

相关文章:

c# - 应用程序在 VS2012 Ultimate 之外运行 5-15 秒后崩溃

c# - 如何在 ASPX 中仅使用原始页面请求自动完成?

c# - 如何将按钮直接放在文本框旁边?

java - 如何在 Spring Controller 的每个方法之前使用 AOP 执行一些代码并拥有 Method 对象

java - spring aop FastClassBySpringCGLIB 与EnhancerBySpringCGLIB

java - 为什么 AspectJ 在包作用域方法上的编织不起作用?

c# - 不确定何时使用抽象属性,何时不使用

c++ - 在 Visual Studio 中链接 DLL

C++/VS2005 : Defining the same class name in two different . cpp文件

database - 无法创建数据源, "Column ' TABLE_CAT' 不属于表 Tables