Слияние покрытия кода 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.
Что касается дополнительных файлов, вам необходимо следующее:
- Пользовательская задача сборки должна ссылаться на Microsoft.VisualStudio.Coverage.Analysis.dll
Папка bin должна содержать следующие дополнительные файлы:
- Microsoft.VisualStudio.Coverage.Symbols.dll
- dbghelp.dll
(Если у вас не установлена 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.
Ну, дорогие ТАК люди, если вы читаете это, вы получите печенье.