以编程方式在C#中读取VS .coveragexml文件

时间:2010-11-13 03:28:39

标签: c# visual-studio-2010 code-coverage

所以我有一些代码可以读取.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文件中的代码覆盖率数据吗?

2 个答案:

答案 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)方法?