自动选择正确的CodeAnalysis规则集

时间:2012-04-17 15:42:32

标签: visual-studio-2010 projects-and-solutions code-analysis tfsbuild fxcop

我们有许多大型解决方案,并根据不同的项目类型提供了许多规则集文件。例如,我们有:

  • 包含以下内容的Sharepoint Rulesset:

    • Microsoft所有规则
    • MSOCAF规则
    • SPDisposeChecker规则
    • 许多自定义规则
  • 测试项目规则集

    • Microsoft所有规则
    • 禁用了一些命名准则规则(例如使用下划线)
    • 许多类似于TypeMock TestLint的测试特定规则
    • 许多自定义规则
  • 标准规则集

    • Microsoft所有规则
    • 许多自定义规则

如果代码分析能够根据项目类型自动选择正确的设置,我会很喜欢它。

我还没有找到理想的方法来做到这一点。我会考虑的事情:

  • 在构建服务器的msbuild文件夹中删除目标文件,该文件根据特定构建目标(yuk)的存在派生项目类型
  • 为每个项目类型(yuk)指定每个目标文件中的CodeAnalayis Rules文件
  • 创建一个自定义Targets文件并在每个项目中包含该文件,在每个项目中设置一个属性以选择正确的项目类型。 (议员)
  • 改变规则本身,以了解它们是否在正确的背景下(可能是 自定义规则,对于默认规则不可行。)。

我们目前正在做什么:

  • 为每个项目手动指定规则集。

我很想听听有关更好解决方案的想法......

2 个答案:

答案 0 :(得分:1)

另一种方法是用代码分析目标文件或构建任务替换允许推理的版本。就个人而言,我不会喜欢这个,因为拦截点对我的口味来说太隐蔽了,但是ymmv ......

如果这是针对一个团队将在一段时间内维持的产品,我可能会选择与您的第三个选项相符的内容。另一方面,如果这是一个项目,其中代码库最终将转移到另一个团队(无论是内部还是外部),我会选择可以通过Visual Studio UI完成的事情。不幸的是,这意味着项目特定的规则集选择。唯一的好消息是,有一个UI允许对给定解决方案中的所有项目进行管理(可从Analyze ...为Solution菜单配置代码分析)。

答案 1 :(得分:1)

我找到了适用于大多数项目类型的解决方案。 Microsoft提供的许多默认Msbuild目标都包含一个选项,可以通过将有问题的目标放在Msbuild文件夹结构的特定文件夹中来加载BeforeTargets和Aftertargets。

我将目标文件放入这些文件夹(基于项目类型预期的方式命名,这些项目类型与项目类型不同),我指定了默认的CodeAnalaysis.rules文件。项目仍然可以覆盖这些,但如果不是,则使用默认值。

Sharepoint例如查找此文件:

$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\SharePointTools\Custom.After.Microsoft.VisualStudio.SharePoint.targets

这些引用存储在msbuild属性中,例如$(CustomAfterSharePointTargets),如果需要,可以扩展或覆盖。

我的解决方案是upon this featurethis feature

我在Visual Studio 11中提出了更多标准化的请求。Please vote for it