我正在尝试将visual studio代码覆盖率文件(data.coverage)导出到xml中,如this blog post from the code analysis team中所述。我已将该帖子中的代码示例移动到自定义MSBuild任务中。我的自定义任务引用位于Visual Studio的PrivateAssemblies文件夹中的 Microsoft.VisualStudio.Coverage.Analysis.dll 。
立即尝试加载代码覆盖率文件会引发代码分析类型异常ImageNotFoundException,指出“映像文件完全限定文件路径到dll 不能找到。“
// the following line throws an exception
CoverageInfo current =
CoverageInfo.CreateFromFile( "c:\path\testresults\x\y\z\data.coverage");
路径是完全限定的,它所引用的DLL确实存在。我的testsettings将此文件列为仪器组件,并设置了“Instrument in place”复选框。我可以在Visual Studio中查看代码覆盖率,因此我知道覆盖率正在发挥作用。
我正在从Visual Studio命令行运行我的MSBuild脚本。它看起来像这样:
<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>
任何人都可以建议我需要做些什么才能使其正常工作?
答案 0 :(得分:7)
5小时后,这是风滚草。我发现了一些additional detail here,这有助于我走得更远。
为了使其正常工作,您需要在pdb和已检测的dll的自定义任务和供应文件夹位置旁边添加一些其他文件。
关于其他文件,您需要以下内容:
您的bin文件夹必须包含以下附加文件:
(如果您没有安装Visual Studio,则必须在msdia100.dll上执行regsvr32.exe)
关于程序集和符号的路径, 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运行文件夹。
亲爱的SO人,如果你正在读这篇文章,你会得到一张饼干。