Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中以编程方式读取VS.coveragexml文件#_C#_Visual Studio 2010_Code Coverage - Fatal编程技术网

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

C# 在C中以编程方式读取VS.coveragexml文件#,c#,visual-studio-2010,code-coverage,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

所以我有一些代码可以读取.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.InvalidCoverage文件异常 was unhandled Message=覆盖率文件 “unittestcoverage.coveragexml”是 无效的或腐败的

coveragexml文件在VisualStudio中可以正常打开,因此我认为该文件的格式没有任何问题

我知道CoverageDS可以导入xml文件,但API不够直观,我能找到的唯一一个使用它的例子是

using(CoverageInfo info = CoverageInfo.CreateFromFile(fileString))
{
   CoverageDS data = info.BuildDataSet();
   data.ExportXml(xmlFile);
}
…这并没有告诉我如何实际读取该文件中的覆盖率数据


有人知道如何处理.coveragexml文件中的代码覆盖率数据吗?

可能是以编程方式操作代码覆盖率信息的最佳介绍,也可以在链接的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));
}

你试过CoverageDS.ReadXml(fileName\u string)方法吗?

是的,我看过你提到的那篇博客,我发现它是最好、最有用的。如果将导出的xml文件交给CreateInfoFromFile,它似乎会引发异常(这是我尝试的第一件事情之一)。我将用它更新问题。用不同的方法更新。这正是我想要的。我只使用DataSet接口就成功地提取了数据,但这要好得多。“若要将二进制VSTest.Console输出转换为Microsoft CoverageDS XML格式,您可以使用下面V0.14发行说明中引用的一个预构建应用程序,或者您可以构建以下转换器应用程序:“我认为~~”CoverageInfo.CreateFromFile“用于从二进制文件(从VSTest.Console)加载,而不是从trx文件加载。”(这只是xml)。看:让我吃惊的是我不知道(哦)trx文件只是xml(