bry*_*ook 2 code-coverage visual-studio-2010
我正在尝试将Visual Studio代码覆盖文件(data.coverage)导出到xml中,如代码分析团队在此博客文章中所述.我已将该帖子中的代码示例移动到自定义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");
Run Code Online (Sandbox Code Playgroud)
路径是完全限定的,它所引用的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>
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议我需要做些什么才能使其正常工作?
5个小时后,这是一个风滚草.我在这里找到了一些额外的细节,这有助于我走得更远.
为了实现这一点,您需要在自定义任务和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" });
Run Code Online (Sandbox Code Playgroud)
但是,将路径更改为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" });
Run Code Online (Sandbox Code Playgroud)
我怀疑"仪器就位"是否真的意味着在该文件夹中,或仪器并复制到MS Test运行文件夹.
亲爱的SO人,如果你正在读这个,你会得到一个饼干.