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

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

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

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

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

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

<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 Ответ

7 голосов
/ 01 июля 2011

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 run.

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

...