У меня есть ряд допустимых файлов .coverage, которые я пытаюсь объединить в один набор данных с помощью метода Microsoft.VisualStudio.Coverage.Analysis.CoverageInfo.BuildDataSet (). Тем не менее я получаю исключение «Microsoft.VisualStudio.CodeCoverage.Analysis.SymbolsNotFoundException: символы для файла изображения« myassembly.dll »не могут быть найдены».
Мне нужна помощь в разрешении этого исключения.
Вещи, которые я проверял / пробовал:
- Проверено, что отдельные файлы .coverage являются действительными и содержат данные покрытия даже для сборок, где я получаю вышеуказанное исключение.
- Проверено, что инструментированные файлы .dll, .pdbs, .coverage и приведенный ниже код находятся в одном каталоге.
- Когда я вызываю перегрузку CoverageInfo.CreateFromFile, содержащую MissingFileCallback, я вижу имя файла отсутствующего файла, поставляемое как «myassembly.instr.pdb», а не «myassembly.pdb». Не уверен, правильно ли это или нет. Мне это кажется подозрительным, но я понятия не имею, что добавит «.instr» к моему имени файла или как решить эту проблему.
public static void CombineFiles(IEnumerable<string> files, string DestFilePath)
{
CoverageDS data = JoinCoverageFiles(files).BuildDataSet();
data.ExportXml(DestFilePath);
}
// From https://blogs.msdn.microsoft.com/phuene/2009/12/04/programmatic-code-coverage-data-merging-in-visual-studio-2010/
private static CoverageInfo JoinCoverageFiles(IEnumerable<string> files)
{
if (files == null)
throw new ArgumentNullException("files");
// This will represent the joined coverage files
CoverageInfo result = null;
foreach (string file in files)
{
// Create from the current file
CoverageInfo current = CoverageInfo.CreateFromFile(file, new MissingFileCallback(OnMissingFile));
if (result == null)
{
// First time through, assign to result
result = current;
continue;
}
// Not the first time through, join the result with the current
CoverageInfo joined = null;
joined = CoverageInfo.Join(result, current);
result = joined;
}
}
return result;
}