如何在TeamCity中使用StyleCop

如何在TeamCity中使用StyleCop,teamcity,stylecop,Teamcity,Stylecop,有人成功地从TeamCity运行StyleCop吗 我知道StyleCop支持命令行模式,但我不确定这将如何集成到TeamCity的报告输出中 我已经签出了在这里找到的这个插件: 但是,它无法运行 我正在使用TeamCity 6.5.1(最新版本)。我不知道您对MSBuild有多熟悉,但您应该能够在TC 6及更高版本中添加新的生成步骤,并将MSBuild设置为生成运行程序,并将其指向一个.proj文件,该文件执行类似于以下操作: <Target Name="StyleCop">

有人成功地从TeamCity运行StyleCop吗

我知道StyleCop支持命令行模式,但我不确定这将如何集成到TeamCity的报告输出中

我已经签出了在这里找到的这个插件:

但是,它无法运行


我正在使用TeamCity 6.5.1(最新版本)。

我不知道您对MSBuild有多熟悉,但您应该能够在TC 6及更高版本中添加新的生成步骤,并将MSBuild设置为生成运行程序,并将其指向一个.proj文件,该文件执行类似于以下操作:

<Target Name="StyleCop">

  <!-- Create a collection of files to scan -->
  <CreateItem Include="$(SourceFolder)\**\*.cs">
    <Output TaskParameter="Include" ItemName="StyleCopFiles" />
  </CreateItem>

  <StyleCopTask
    ProjectFullPath="$(MSBuildProjectFile)"
    SourceFiles="@(StyleCopFiles)"
    ForceFullAnalysis="true"
    TreatErrorsAsWarnings="true"
    OutputFile="StyleCopReport.xml"
    CacheResults="true" />

  <Xslt Inputs="StyleCopReport.xml"
     RootTag="StyleCopViolations" 
     Xsl="tools\StyleCop\StyleCopReport.xsl"
     Output="StyleCopReport.html" />

  <XmlRead XPath="count(//Violation)" XmlFileName="StyleCopReport.xml">
    <Output TaskParameter="Value" PropertyName="StyleCopViolations" />
  </XmlRead>

  <Error Condition="$(StyleCopViolations) > 0" Text="StyleCop found $(StyleCopViolations) broken rules!" />

</Target>
Microsoft.StyleCop.dll
包含在StyleCop安装中,您需要适当地设置路径

要在TeamCity中查看输出的StyleCop结果,需要使用适当的.xsl文件(在上面的脚本中称为StyleCopReport.xsl)将.xml StyleCop报告转换为HTML

要在TeamCity中显示HTML文件,您需要从这个.HTML输出创建一个HTML文件,然后单击


这本书是一个很好的资源。

您知道teamcity仅从msbuild提供特定属性吗? 不需要服务消息,请参阅:

因此,您不必添加自定义报告页。 使用构建统计信息,例如

<TeamCitySetStatus Status="$(AllPassed)" Text="Violations: $(StyleCopViolations)" />

然后,您也可以记录统计信息:

<TeamCityReportStatsValue Key="StyleCopViolations" Value="$(StyleCopViolations)" />

然后创建一个要显示的自定义图形,则msbuild输出中已经存在冲突。 编辑main-config.xml并添加:

<graph title="Style Violations" seriesTitle="Warning">
   <valueType key="StyleCopViolations" title="Violations" buildTypeId="bt20"/>
 </graph>

其中buildTypeId=“bt20”bt20是您的样式构建。

有一个(新的?)第三方TeamCity插件用于StyleCop(尽管我还没有尝试过)

更新:据我所知,最新版本只适用于TeamCity 7(或者我做错了什么)。另外,我有一个非常慢的(虚拟)构建服务器,所以即使在重新启动服务之后,StyleCop运行程序也需要一段时间才能出现在web界面中

我做的另一件蠢事是没有正确阅读自述文件:你必须解压下载的zip文件,然后使用里面的zip文件


我最初也只是在“Include”选项中列出了一个.cs文件列表(对于构建步骤),但这并不起作用;sln或csproj文件的链接确实有效。

我来晚了,但实现这一点的一个非常简单的方法是在任何您希望使用StyleCop分析的项目中安装NuGet软件包

安装包后,无论在何处或如何调用,StyleCop分析都将在您执行的每个构建上运行,例如VS、命令行、msbuild、psake、rake、fake、bake、nant、构建服务器等。无需特殊操作

如果您希望在StyleCop规则被破坏时生成失败,您只需要在每个适当的生成配置下将以下元素添加到项目文件中,例如

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <StyleCopTreatErrorsAsWarnings>false</StyleCopTreatErrorsAsWarnings>
    ...

假的
...

同样,无论在何处以及如何调用,这将在每个生成上都有效。

您是否使用MSBuild作为生成运行程序?我使用的是Visual Studio SLN运行程序。@Benjol的回答中隐藏着以下非常有用的注释:“我没有正确阅读自述文件的另一件蠢事是:您必须解压缩下载的zip,用里面的拉链-这把我弄糊涂了!我是否可以像您所示的那样,将根路径作为Include提供,并且它将在所有子文件夹下递归迭代以查找.cs文件?另外,我最初的问题是,这将如何在TeamCity报告中显示?在StyleCop(4.7)的最后一个版本中,StyleCopTask移到了“StyleCop.dll”,因此使用将现在看起来是这样的:很好,我将chrck掉它。在TC GUI中也可以这样做吗?前两个用于常规msbuild,您需要在每个msbuild上使用一个条件,这样它就不会破坏任何手动生成—只有在TC内部运行时才能工作。在server config folder.cool上,图形是文本编辑的,但是添加到每个项目还是有点麻烦,你不这么认为吗?你可以一次将包添加到解决方案中的所有项目中,就像任何其他NuGet包一样。如果您想让构建在冲突中失败,那么是的,您必须手动将该元素添加到每个项目中。但是,该步骤是可选的-在接受的答案中,每个项目都有一个强制性的手动步骤;-)@AdamRalph使用此方法,如果存在任何错误,如何将StyleCop分析的结果输出到TeamCity内部进行可视化?谢谢我没有做什么特别的事。我只是让消息进入日志并从那里检查它们。在我的日常工作中,我们无法建立在违规的基础上,因此我们不得不仔细查看日志并修复它们。对于OSS,当我在VS.Gotcha中本地看到它们时,我让它们通过并修复它们,这是有意义的。如果构建无法在您自己的机器上本地工作,您将永远(即不应该)无法提交任何内容,那么在TeamCity中报告结果有什么意义呢。我可以接受。谢谢在TC8中不起作用,除非我像你一样做错了什么。说明是错误的,因为下载中没有stylecop.zip,您必须这样做。不管怎样,这不管用。。。
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <StyleCopTreatErrorsAsWarnings>false</StyleCopTreatErrorsAsWarnings>
    ...