0

我已经使用 StyleCop.MSBuild nuget 包将 StyleCop 集成到构建管道中。它工作得很好,但它有一些限制。我可以通过将 StyleCop 违规视为错误来使构建​​失败。这可以解决问题,但这意味着我根本不能有任何违规行为。

我们想做的是逐步将 StyleCop 引入构建管道,并允许开发人员在某些项目中出现 10 甚至 20 次 StyleCop 违规。

我尝试将 StyleCopMaxViolationCount 设置为 1,希望如果拾取 1 个违规,构建会失败,但这不起作用 - 构建成功并显示警告。

<StyleCopMaxViolationCount Condition="'$(StyleCopMaxViolationCount)' == ''">1</StyleCopMaxViolationCount>
4

1 回答 1

1

前段时间我做了同样的事情,幸好它对我们有用!

我没有找到一种简单(直接)的方法。所以我首先直接从 StyleCop.dll 运行一个任务(注意当时是 4.6 版)并将结果放入文件中。然后我只写了一个简单的 MSBuild 任务来查找放入该文件的错误数量:

public class AnalyzeStylecopResults : ITask
{
    private IBuildEngine engine;
    public IBuildEngine BuildEngine
    {
        get { return engine; }
        set { engine = value; }
    }

    private ITaskHost host;
    public ITaskHost HostObject
    {
        get { return host; }
        set { host = value; }
    }

    public bool Execute()
    {
        XDocument xdoc = XDocument.Load(StylecopResultsFile);

        _violationCount = xdoc.Descendants().Count();
        return true;
    }

    private string _stylecopResultsFile;

    [Required]
    public string StylecopResultsFile
    {
        get { return _stylecopResultsFile; }
        set { _stylecopResultsFile = value; }
    }

    int _violationCount;
    [Output]
    public int ViolationCount
    {
        get { return _violationCount; }
        set { _violationCount = value; }
    }
}

然后我像这样创建了 msbuild 文件(stylecopvalidate.msbuild):

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
    <UsingTask AssemblyFile="StylecopAnalyzerTasks.dll" TaskName="StylecopAnalyzerTasks.AnalyzeStylecopResults" />
    <Target Name="StyleCop">
        <AnalyzeStylecopResults StylecopResultsFile="$(CCNetWorkingDirectory)\stylecop-results.xml">
            <Output TaskParameter="ViolationCount" PropertyName="ViolationCount" />
        </AnalyzeStylecopResults>       
        <Error Text="Violations count in results file: $(ViolationCount) but max allowed: $(MaxViolationCount)" Condition=" $(ViolationCount) &gt; $(MaxViolationCount) " />
    </Target>
</Project>

最后从 msbuild 任务中调用它:

<msbuild>
    <description>Stylecop task</description>
    <executable>$(MSBuild4Path)</executable>
    <projectFile>path\to\stylecopvalidate.msbuild</projectFile>         
    <timeout>120</timeout>
    <logger>$(MSBuildLoggerPath)</logger>
</msbuild>

希望它有所帮助,不幸的是我没有更多的“最新”版本。

于 2013-11-13T21:20:11.817 回答