如何配置Azure DevOps代码覆盖率检查排除第三方NuGet DLL?
解决Azure DevOps Pipeline代码覆盖率仅统计自研代码的问题
方法一:使用.runsettings配置文件
创建名为CodeCoverage.runsettings的配置文件,放在项目根目录,通过规则过滤第三方代码,仅保留自研代码的覆盖率统计:
<?xml version="1.0" encoding="utf-8"?> <RunSettings> <DataCollectionRunSettings> <DataCollectors> <DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=17.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <Configuration> <CodeCoverage> <!-- 替换为自研代码的命名空间/模块,支持通配符 --> <Include> <Module>YourCompany.*</Module> <Module>YourProject.*</Module> </Include> <!-- 排除第三方包与测试项目自身 --> <Exclude> <Module>*.Tests</Module> <Module>Newtonsoft.Json</Module> <Module>Microsoft.*</Module> <Module>System.*</Module> <!-- 带版本号的第三方包通用排除规则 --> <Module>*[0-9].*</Module> </Exclude> </CodeCoverage> </Configuration> </DataCollector> </DataCollectors> </DataCollectionRunSettings> </RunSettings>
修改Pipeline中的测试任务,指定使用该配置文件:
- task: DotNetCoreCLI@2 displayName: Test inputs: command: test projects: '**/*[Tt]ests/*.csproj' arguments: '--configuration release --collect "Code coverage" --settings CodeCoverage.runsettings --no-build'
方法二:直接通过命令行参数过滤(基于Coverlet)
如果项目使用Coverlet作为覆盖率收集工具(Azure DevOps默认覆盖率收集多基于此),可直接在测试命令中添加过滤参数:
- task: DotNetCoreCLI@2 displayName: Test inputs: command: test projects: '**/*[Tt]ests/*.csproj' arguments: '--configuration release --collect "Code coverage" --no-build /p:Exclude="[Newtonsoft.Json]*" /p:Exclude="[Microsoft.*]*" /p:Exclude="[System.*]*" /p:Include="[YourCompany.*]*"'
注:将YourCompany.*替换为自研代码的命名空间,[Newtonsoft.Json]*这类为需要排除的第三方包命名空间,可按需增减。
关键说明
- 优先推荐
.runsettings文件方案,配置更集中、易维护;命令行参数方案适合快速临时调整。 - 需确保
Include规则精准匹配自研代码的命名空间/模块,避免漏统计;Exclude规则覆盖项目依赖的第三方包,可根据实际依赖情况调整。
内容的提问来源于stack exchange,提问作者Matt Frear
相关产品推荐
相关产品推荐

