所以我有一些代码可以读取.coverage文件中的方法......
using (CoverageInfo info = CoverageInfo.CreateFromFile(this.myCoverageFile))
{
CoverageDS ds = info.BuildDataSet();
foreach (ICoverageModule coverageModule in info.Modules)
{
CodeModule currentModule = new CodeModule(coverageModule.Name);
byte[] coverageBuffer = coverageModule.GetCoverageBuffer(null);
using (ISymbolReader reader = coverageModule.Symbols.CreateReader())
{
Method currentMethod;
while (reader.GetNextMethod(out currentMethod, coverageBuffer))
{
if (currentMethod != null)
{
currentModule.Methods.Add(currentMethod);
}
}
}
returnModules.Add(currentModule);
}
}
...但我希望能够读取已导出到xml的.coverage文件。原因是.coverage文件要求源dll位于测量代码覆盖率时的确切位置,这对我不起作用。
当我尝试使用CreateFromFile(字符串)加载coveragexml文件时,我收到以下异常。
Microsoft.VisualStudio.Coverage.Analysis.InvalidCoverageFileException 未处理的消息=覆盖文件 “unittestcoverage.coveragexml”是 无效或腐败。
在Visual Studio中打开coveragexml文件就好了,所以我不相信文件格式存在任何问题。
我知道CoverageDS可以导入一个xml文件,但API不是直观的,我能找到它的唯一例子是......
using(CoverageInfo info = CoverageInfo.CreateFromFile(fileString))
{
CoverageDS data = info.BuildDataSet();
data.ExportXml(xmlFile);
}
...它没有告诉我如何从该文件中实际读取覆盖率数据。
有人知道如何处理.coveragexml文件中的代码覆盖率数据吗?
答案 0 :(得分:3)
可能是以编程方式操作代码覆盖率信息的最佳介绍here以及链接的ms_joc博客。
我非常确定您可以将'CreateInfoFromFile'与.coverage文件或您在上面的示例中导出的XML文件一起使用。
<强>更新强> 如果将coveragexml作为参数传递,则CreateInfoFromFile会引发异常。这是另一种选择:
CoverageDS dataSet = new CoverageDS();
dataSet.ImportXml(@"c:\temp\test.coveragexml");
foreach (CoverageDSPriv.ModuleRow module in dataSet.Module)
{
Console.WriteLine(String.Format("{0} Covered: {1} Not Covered: {2}", module.ModuleName, module.LinesCovered, module.LinesNotCovered));
}
答案 1 :(得分:0)
您是否尝试过CoverageDS.ReadXml(fileName_string)方法?