前段时间我做了同样的事情,幸好它对我们有用!
我没有找到一种简单(直接)的方法。所以我首先直接从 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>
希望它有所帮助,不幸的是我没有更多的“最新”版本。