Программное чтение VS.coveragexml файла в C # - PullRequest
3 голосов
/ 13 ноября 2010

Итак, у меня есть код, который может читать методы из файла .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);
    }
}

... но я хочу иметь возможность читать файлы .coverage, которые были экспортированы вXML тоже.Причина этого заключается в том, что для файлов .coverage требуется, чтобы исходные dll находились в том же месте, в котором они находились при измерении покрытия кода, что не работает для меня.

Когда я пытаюсь загрузить файл coverxml с помощью CreateFromFile(строка) Я получаю следующее исключение.

Microsoft.VisualStudio.Coverage.Analysis.InvalidCoverageFileException не обработано. Сообщение = файл покрытия "unittestcoverage.coveragexml" недействителен или поврежден.

Файл coverxml открывается в Visual Studio просто отлично, поэтому я не думаю, что есть какие-либо проблемы с форматом файла.

Я знаю, что CoverageDS может импортировать файл xml, но API менее интуитивен иединственный пример, который я могу найти для его использования, это ...

using(CoverageInfo info = CoverageInfo.CreateFromFile(fileString))
{
   CoverageDS data = info.BuildDataSet();
   data.ExportXml(xmlFile);
}

..., который ничего не говорит мне о том, как на самом деле прочитать данные покрытия из этого файла.

Кто-то знаетКак обработать данные покрытия кода из файла .coveragexml?

Ответы [ 2 ]

3 голосов
/ 13 ноября 2010

Вероятно, лучшее введение в программную обработку информации о покрытии кода доступно здесь , а также в связанном блоге ms_joc.

Я почти уверен, что вы можете использовать CreateInfoFromFile либо с файлом .coverage, либо с файлом XML, который вы экспортировали в приведенном выше примере.

UPDATE: CreateInfoFromFile создает исключение, если в качестве аргумента передается покрытие xml. Вот альтернатива:

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));
}
0 голосов
/ 13 ноября 2010

Вы пробовали метод CoverageDS.ReadXml (fileName_string)?

...