Неверные данные символа для файла? - PullRequest
0 голосов
/ 07 мая 2019

У меня есть ряд допустимых файлов .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;
        }
...