C# 框架约定的静态检查

C# 框架约定的静态检查,c#,vb.net,visual-studio,visual-studio-2010,convention-over-configur,C#,Vb.net,Visual Studio,Visual Studio 2010,Convention Over Configur,是否有一个产品/项目允许您为MVC项目定义约定,以便静态地检查命名约定,例如在继承自Controller的类的末尾附加Controller和/或在用属性装饰方法时强制执行某个方法签名 我基本上是在寻找一种方法,为加入我们团队的新开发人员设置一些防护栏,我们有一套明确的约定,其中一些约定用于通过反射动态连接。看到由于不兼容的签名而导致此反射连线失败,将对我们的升级过程带来巨大的好处 所需的关键功能: 静态/编译时检查破坏的规则 能够以特定属性修饰的方法为目标(通过正则表达式或向导) 基于不同项目

是否有一个产品/项目允许您为MVC项目定义约定,以便静态地检查命名约定,例如在继承自Controller的类的末尾附加Controller和/或在用属性装饰方法时强制执行某个方法签名

我基本上是在寻找一种方法,为加入我们团队的新开发人员设置一些防护栏,我们有一套明确的约定,其中一些约定用于通过反射动态连接。看到由于不兼容的签名而导致此反射连线失败,将对我们的升级过程带来巨大的好处

所需的关键功能:

  • 静态/编译时检查破坏的规则
  • 能够以特定属性修饰的方法为目标(通过正则表达式或向导)
  • 基于不同项目类型的不同规则集。(例如:MVC应用程序的一组约定,Web窗体应用程序的另一组约定,以及后缀为.BLL的类库的另一组约定)

任何输入建议都将不胜感激,尽管我要求您仅在知道支持这些功能的情况下才予以响应。

这里有个人经验,但我总是为类似的内容编写测试。我解析我的程序集,并确保事情符合约定。对于几个特定的示例,我检查了WCF请求/响应对象,以确保它们没有通过线路发送“DTO”,并且它们都位于一致的XML名称空间中

下面是一个确保所有服务方法都返回继承BaseResponse对象的内容的快速示例:

[Test]
public void All_IMyService_methods_should_return_a_BaseResponse()
{
    var methods = typeof (IMyService).GetMethods();
    foreach (var methodInfo in methods)
        Assert.That(typeof (BaseResponse).IsAssignableFrom(methodInfo.ReturnType), "Service Method " + methodInfo.Name + " does not return a BaseResponse");
}

我相信有人会有更好/更自动化的东西,但这对我来说很有效。

你尝试过FxCop/代码分析吗?这是一个非常酷的方法,我会尝试一下,看看它是否能涵盖我这个周末关心的用例。我喜欢它。它是灵活的,你会得到。它只受到反射灵活性的限制。也就是说,您可能不会遇到无法测试的问题。谢谢,我能够通过反思涵盖我所有的案例!