如何从 PartCover 结果 .xml 生成 HTML 报告
4 回答
有一个工具可以用来生成 HTML 报告:
https://github.com/danielpalme/ReportGenerator
在这里您可以找到一篇如何将该工具集成到 MSBuild 中的文章:
据我所知,没有像 NCoverExplorer 这样方便的工具可以将 PartCover 结果 .xml 文件转换为 .html 报告,但是有一些 .xsl 文件可用于在 CruiseControl.NET 中将 PartCover 的结果转换为 .html : CruiseControl.NET 与 PartCover。
您可以从 CruiseControl.NET 获取这些 .xsl 文件,并使用Sandcastle的 XslTransform.exe 之类的东西转换您的 PartCover results.xml 。
顺便说一句,如果这恰好与 TeamCity 相关,那么即将发布的 5.0 版本将包括对使用 PartCover 或 NCover 的 .NET 覆盖的支持。有关更多信息,请参阅文档。否则忽略本段;-)
最简单的解决方案可能是使用 msxsl,一个简单的命令行转换器。我正是出于这个目的使用它,它很容易集成到您的构建系统中。
可能是一种复杂的方法,但我使用 Simian xml 报告进行了此操作。为格式化创建了一个 XSL 文件,然后编写了一个愚蠢的小控制台应用程序;
private const string MissingExtension = "Please enter a valid {0} file, this is missing the extension.";
private const string InvalidExtension = "Please enter a valid {0} file, the file provided has an invalid extension.";
public static void Main(string[] args)
{
if (args.Length < 2)
{
System.Console.WriteLine("Please enter a xsl file and xml file full path.");
return;
}
var xslFile = args[0];
var xmlFile = args[1];
if (!CheckFileNameFormat(xslFile, false))
return;
if (!CheckFileNameFormat(xmlFile, true))
return;
var transform = new XslCompiledTransform();
// Load the XSL stylesheet.
transform.Load(xslFile);
// Transform xml file into an html using the xsl file provided.
transform.Transform(xmlFile, xmlFile.Replace("xml", "html"));
}
private static bool CheckFileNameFormat(string fileName, bool isXmlFile)
{
var extension = isXmlFile ? "xml" : "xsl";
// valida that the argument has a period
if (fileName.IndexOf(".") < 1)
{
System.Console.WriteLine(string.Format(MissingExtension, extension));
return false;
}
var filePieces = fileName.Split('.');
// split on the period and make sure the extension is valid
if (filePieces[filePieces.GetUpperBound(0)] != extension)
{
System.Console.WriteLine(string.Format(InvalidExtension, extension));
return false;
}
return true;
}
然后我可以像这样从 MSBuild 文件中调用它;
<Target Name="RunSimian" DependsOnTargets="RebuildSolution">
<Exec IgnoreExitCode="true" Command=""$(MSBuildProjectDirectory)\..\Build\Packages\Simian\simian-2.2.24.exe" -formatter=xml:$(MSBuildProjectDirectory)\..\Build\Artifacts\simian.xml -language=cs -excludes=$(MSBuildProjectDirectory)\..\Product\Production\**\*.Designer.cs $(MSBuildProjectDirectory)\Production\**\*.cs" >
</Exec>
<Exec IgnoreExitCode="true" Command=""$(MSBuildProjectDirectory)\..\Build\Packages\XmlToHtmlConverter.exe" $(MSBuildProjectDirectory)\..\Build\Packages\Simian\simian.xsl $(MSBuildProjectDirectory)\..\Build\Artifacts\simian.xml">
</Exec>