Слияние покрытия кода Visual Studio завершается неудачей с помощью ImageNotFoundException

Я пытаюсь экспортировать файлы покрытия кода VisualStudio (data.coverage) в XML, как описано в этом сообщении в блоге от команды анализа кода. Я переместил пример кода в этом посте в пользовательскую задачу MSBuild. Моя пользовательская задача ссылается на файл Microsoft.VisualStudio.Coverage.Analysis.dll, расположенный в папке PrivateAssemblies VisualStudio.

Сразу же при попытке загрузить файл покрытия кода выдается исключение, типизированное для анализа кода, ImageNotFoundException, в котором говорится, что " файл-путь-файл-путь-до-dll не найден".

 // the following line throws an exception
 CoverageInfo current = 
     CoverageInfo.CreateFromFile( "c:\path\testresults\x\y\z\data.coverage");

Путь полностью определен, и DLL, на которую он ссылается, существует. В моих наборах тестов этот файл указан как сборка для прибора, и установлен флажок "Прибор на месте". Я могу просматривать покрытие кода в VisualStudio, поэтому я знаю, что покрытие работает.

Я запускаю свой скрипт MSBuild из командной строки VisualStudio. Это выглядит так:

<Project ToolsVersion="4.0" DefaultTargets="Default;"
      xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

   <UsingTask TaskName="CustomTasks.MergeCoverageTask" 
      AssemblyFile="CustomTasks.dll" 
      />

   <Target Name="Default">

      <ItemGroup>
         <CoverageFiles Include="**\data.coverage" />
      </ItemGroup>

      <MergeCoverageTask
           CoverageFiles="@(CoverageFiles)"
           OutputFile="output.xml"
           />
   </Target>
 </Project>

Кто-нибудь может подсказать, что мне нужно сделать, чтобы это работало правильно?

1 ответ

Решение

5 часов спустя, и это дурак. Я нашел здесь некоторые дополнительные детали, которые помогли мне продвинуться дальше по пути.

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

Что касается дополнительных файлов, вам необходимо следующее:

  1. Пользовательская задача сборки должна ссылаться на Microsoft.VisualStudio.Coverage.Analysis.dll
  2. Папка bin должна содержать следующие дополнительные файлы:

    • Microsoft.VisualStudio.Coverage.Symbols.dll
    • dbghelp.dll
  3. (Если у вас не установлена ​​Visual Studio, вы должны выполнить regsvr32.exe на msdia100.dll)

Что касается путей к сборкам и символам, метод CreateFromFile принимает набор папок для поиска. Что действительно странно, так это то, что ошибка жалуется на невозможность найти отсутствующие инструментированные сборки и указывает полный путь.

Файл изображения c:\project\output\Assembly.dll не найден.

... но если вы укажете этот путь, он не будет работать.

 CoverageInfo current = 
 CoverageInfo.CreateFromFile( "c:\project\testresults\x\In\data.coverage", 
              new string[] { "c:\project\output" },
              new string[] { "c:\project\output" });

Тем не менее, изменение пути к папке вывода вывода TestResults работает нормально:

 CoverageInfo current = 
 CoverageInfo.CreateFromFile( "c:\project\testresults\x\In\data.coverage", 
              new string[] { "c:\project\testresults\x\Out" },
              new string[] { "c:\project\testresults\x\Out" });

Я спрашиваю, действительно ли "инструмент на месте" означает в этой папке, или инструмент и скопировать в папку запуска MS Test.

Ну, дорогие ТАК люди, если вы читаете это, вы получите печенье.

Другие вопросы по тегам