1

我需要帮助在解决方案中包含的所有 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>
4

1 回答 1

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

于 2012-09-28T17:42:02.997 回答