如何在保留路径映射配置时获取Fine Code Coverage结果?
解决路径映射与Fine Code Coverage覆盖率采集的冲突问题
环境信息
- IDE:Microsoft Visual Studio Community 2022(64位)17.1.3
- FCC版本:1.1.192
- 项目结构:
MyProject(主项目,MyProject命名空间)+MyProjectTests(测试项目,MyProject.tests命名空间),所有测试已通过 - 当前配置:主项目
PropertyGroup中添加$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)'))=./用于隐藏堆栈跟踪完整路径;测试项目输出目录包含所有构建产物及MyProject.dll;自动生成的runsettings已配置包含MyProject.dll、排除MyProjectTests.dll;PDB内嵌在主二进制文件中
问题症状
添加路径映射配置后,FCC无法定位MyProject.dll引用的文件,输出窗口大量报文件不存在错误;移除该配置则覆盖率采集正常,但生产环境必须保留此配置以避免构建机器路径泄露。
可行解决方案
方案1:在runsettings中为FCC单独配置路径映射
通过runsettings添加反向路径映射,让FCC能将主项目映射后的相对路径转换回实际文件路径:
- 打开测试项目的
runsettings文件 - 在
CodeCoverage节点下新增SourcePath配置块:
<CodeCoverage> <!-- 保留原有包含/排除配置 --> <SourcePath> <MapFrom>$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)'))</MapFrom> <MapTo>$(MSBuildThisFileDirectory)</MapTo> </SourcePath> </CodeCoverage>
该配置仅作用于覆盖率采集流程,不影响主项目堆栈跟踪的路径隐藏效果。
方案2:条件性启用路径映射
仅在生产构建时启用路径映射,开发/测试构建时禁用,兼顾两种场景需求:
- 修改
MyProject的项目文件,将路径映射配置添加条件判断:
<PropertyGroup Condition="'$(Configuration)' == 'Release'"> $([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)'))=./ </PropertyGroup>
Debug环境下路径映射不生效,FCC可正常采集覆盖率;Release环境下配置生效,避免路径泄露。
方案3:为FCC添加额外文件搜索路径
通过FCC扩展设置指定主项目实际目录,帮助其定位文件:
- 打开Visual Studio的FCC设置(可通过扩展菜单或测试窗口的FCC入口找到)
- 在「Additional Search Paths」中添加
MyProject项目的根目录路径 - 保存设置后重新运行测试,FCC会在指定路径中查找映射后的文件
注意事项
- 所有方案均不会破坏内嵌PDB带来的行号信息优势
- 使用方案1时,需保证
runsettings中MapFrom的值与主项目配置的完全一致 - 方案2需根据实际生产构建的配置名称调整
Condition中的Configuration值
内容的提问来源于stack exchange,提问作者Matt27
相关产品推荐
相关产品推荐

