我已使用StyleCop.MSBuild nuget包将StyleCop集成到构建管道中。它工作得很好,但它有一些局限性。我可以通过将StyleCop违规视为错误来使构建失败。这样就可以了,但这意味着我根本不会有任何违规行为。
我们想要做的是逐步将StyleCop引入构建管道,并允许开发人员在某些项目中有10个甚至20个StyleCop违规。
我尝试将StyleCopMaxViolationCount设置为1,希望如果获取1次违规,构建将失败,但是这不起作用 - 构建成功并显示警告。
<StyleCopMaxViolationCount Condition="'$(StyleCopMaxViolationCount)' == ''">1</StyleCopMaxViolationCount>
答案 0 :(得分: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) > $(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>
希望它有所帮助,遗憾的是我没有任何“最近”的版本。