3

我们有许多大型解决方案,并且有许多基于不同项目类型的规则集文件。例如我们有:

  • 一个 Sharepoint 规则集,包含:

    • 微软所有规则
    • MSOCAF 规则
    • SPDisposeChecker 规则
    • 一些自定义规则
  • 测试项目规则集

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

    • 微软所有规则
    • 一些自定义规则

如果代码分析能够根据项目类型自动选择正确的集合,我会很高兴。

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

  • 在构建服务器的 msbuild 文件夹中放置一个目标文件,该文件根据特定构建目标 (yuk) 的存在派生项目类型
  • 在每个项目类型的每个目标文件中指定 CodeAnalayis 规则文件 (yuk)
  • 创建一个自定义目标文件并将其包含在每个项目中,在每个项目中设置一个属性以选择正确的项目类型。(呸)
  • 更改规则本身以了解它们是否在正确的上下文中(自定义规则可能,默认规则不可行)。

我们目前在做什么:

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

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

4

2 回答 2

1

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

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

于 2012-04-17T18:02:26.247 回答
1

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

我将目标文件放入这些文件夹中(根据项目类型对它们的期望方式命名,这些往往因项目类型而异),我在其中指定默认 CodeAnalaysis.rules 文件。项目仍然可以覆盖这些,但如果没有,则使用默认值。

例如,Sharepoint 会查找此文件:

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

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

我的解决方案是建立在这个特性这个特性之上的。

I put in a request to standardize this more in Visual Studio 11. Please vote for it.

于 2012-04-22T15:08:59.717 回答