如何通过命令行在MSBuild中指定CodeAnalysisRuleset

时间:2009-10-23 01:21:52

标签: c# msbuild static-analysis fxcop msbuild-propertygroup

我希望能够在命令行MSBuild中指定Code AnalysisRules(用于Code Analysis / FXCOP)。 项目文件中会包含以下内容:

<CodeAnalysisRules>-Microsoft.Globalization#CA1301;-Microsoft.Globalization#CA1302</CodeAnalysisRules>

所以我假设我使用这样的东西:

MSBuild.exe /property:RunCodeAnalysis=true /property:CodeAnalysisRules=-Microsoft.Globalization#CA1301

哪种方法正常,当我想添加其他规则时,它不喜欢半冒号:

MSBuild.exe /property:RunCodeAnalysis=true /property:CodeAnalysisRules=-Microsoft.Globalization#CA1301;-Microsoft.Globalization#CA1302

MSBUILD : error MSB1006: Property is not valid. Switch: -Microsoft.Globalization#CA1302

如何指定多个规则?

我很乐意引用一个文件,但我不想只更改项目文件。

Backgroud :我想为持续集成服务器创建一组规则(在我的例子中是Hudson)。

注意:我正在运行Visual Studio 2005

2 个答案:

答案 0 :(得分:1)

试试这个:

msbuild /property:RunCodeAnalysis=true;CodeAnalysisRules=-Microsoft.Globalizati
on#CA1301%3B-Microsoft.Globalization#CA1302

答案 1 :(得分:0)

KMoraz的建议似乎只适用于单一规则。我想要的是能够删除多个规则。我也希望能够为多个项目做到这一点。

我已经弄清楚我需要做什么:我维护一个“规则”文件,其中包含了每个项目所使用的所有排除项。然后我在项目文件中引用此文件。所以它看起来像这样:

项目文件:

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!--the other project stuff here-->
  <Import Project="X:\Hudson\jobs\bin\DefaultRules.targets" xmlns="" />
</Project>

排除文件(DefaultRules.targets):

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <RunCodeAnalysis>true</RunCodeAnalysis>
      <CodeAnalysisRules>-Microsoft.Design#CA2210;-Microsoft.Design#CA1014;-Microsoft.Design#CA2210;-Microsoft.Naming#CA1705;-Microsoft.Globalization#CA1300;-Microsoft.Globalization#CA1301;-Microsoft.Globalization#CA1302;-Microsoft.Globalization#CA1303;-Microsoft.Globalization#CA1306;-Microsoft.Globalization#CA1304;-Microsoft.Globalization#CA1305</CodeAnalysisRules>
   <TreatWarningsAsErrors>`false`</TreatWarningsAsErrors>
  </PropertyGroup>
</Project>

我将排除文件存储在存储库中,每个解决方案和项目都使用它。非常整洁:)