MSbuild风格的cop扩展任务在解决方案上运行

时间:2012-09-27 12:52:41

标签: msbuild stylecop

我需要帮助在解决方案中包含的所有cs文件上运行stylecop任务。 请告诉我它是否可能以及如何? 现在我可以在文件上运行它,但不能在解决方案上运行。

 <CreateItem Include="$(RootPath)\**\*.cs">
  <Output TaskParameter="Include" ItemName="StyleCopFiles"/>
</CreateItem>

 <MSBuild.ExtensionPack.CodeQuality.StyleCop
          TaskAction="Scan"
          ShowOutput="true"
          ForceFullAnalysis="true"
          CacheResults="false"
          SourceFiles="@(StyleCopFiles)"
          logFile="$(OutDir)\StyleCopLog.txt"
          SettingsFile="$(MSBuildStartupDirectory)\..\Settings.StyleCop"
          ContinueOnError="false">
          <Output TaskParameter="Succeeded" PropertyName="AllPassed"/>
          <Output TaskParameter="ViolationCount" PropertyName="Violations"/>
          <Output TaskParameter="FailedFiles" ItemName="Failures"/>
    </MSBuild.ExtensionPack.CodeQuality.StyleCop>

1 个答案:

答案 0 :(得分:3)

您是否考虑过自动运行StyleCop规则作为项目构建过程的一部分?这不会在解决方案级别运行所有规则,而是在项目级别运行。我更喜欢这种方法,因为规则将在您构建项目/解决方案时运行,并在“错误列表”面板中显示为“警告”(双击以导航到有问题的代码行)。在逐个项目的基础上对此进行配置可能看起来很痛苦,但我们的单元测试项目有一组不同的StyleCop规则,这使我们可以单独配置它们。

此外,您不必向构建脚本显式添加MSBuild任务,因为构建项目将自动执行StyleCop规则。

值得注意的是,我正在使用NuGet包:StyleCop.MSBuild(版本4.7.17.1)并使用相对路径从我的.csproj文件中引用包,如下所示:

<Project>
    <Import Project="..\Packages\StyleCop.MSBuild.4.7.17.1\tools\StyleCop.targets" />
</Project>

http://stylecop.codeplex.com/wikipage?title=Running%20StyleCop%20in%20VS2005%20or%20VS%20Express&referringTitle=Documentation

您还可以在希望规则运行时设置条件。如果条件计算结果为假,则StyleCop将不会运行。我们在运行单元测试时使用条件来压缩StyleCop

<Project>
    <Import Project="..\Packages\StyleCop.MSBuild.4.7.17.1\tools\StyleCop.targets" Condition="'$(NCrunch)'!='1'" />
</Project>

要配置StyleCop规则,您需要安装StyleCop_v4.7.17.0.msi。我们只为整个代码库定义了一个Settings.StyleCop文件(父设置文件)。

http://stylecop.codeplex.com/wikipage?title=Sharing%20StyleCop%20Settings%20Across%20Projects&referringTitle=Documentation