问题描述
我有一个包含单元测试项目的 Visual Studio .NET Core 解决方案。所有项目都引用了 Microsoft.NET.Test.Sdk Nuget 包,据我所知,这是执行单元测试的“必备”包。
我想对单元测试代码执行静态代码分析(因为它也是我们可交付成果的一部分)。但是,每次我将声纳分析作为 Azure DevOps 管道的一部分运行时,我都会在 SonarQube 报告中看到单元测试 *.cs 文件(以及单元测试项目中的其他文件)中的“0”行代码。
我还发现了有趣的事情。如果我删除了对 Microsoft.NET.Test.Sdk Nuget 包的引用 - 静态代码分析执行没有任何问题,并且代码对于 Sonar Qube 扫描仪是可见的。 此外,在 Azure DevOps 构建代理上运行时,“dotnet build”命令不会为单元测试项目报告任何警告——即使它应该 ?。
我的 SonarQube Prepare 任务配置管道文件非常简单,如下所示:
- task: SonarQubePrepare@4
displayName: Prepare SonarQube analysis
inputs:
SonarQube: 'SonarQube (XX)'
scannerMode: 'MSBuild'
projectKey: 'XXX-YYY'
projectName: 'XXX-YYY'
extraProperties: |
sonar.sources=src/**/*
在 Azure DevOps 代理上运行的详细 dotnet build 命令如下所示:
/usr/bin/dotnet build /home/vsts/work/1/s/src/XXX.IntegrationTests/Tests/XXX.YYY.IntegrationTests.csproj -dl:CentralLogger,"/home/vsts/work/_tasks/DotNetCoreCLI_5541a522-603c-47ad-91fc-a4b1d163081b/2.181.0/dotnet-build-helpers/Microsoft.TeamFoundation.distributedTask.MSBuild.Logger.dll"*ForwardingLogger,"/home/vsts/work/_tasks/DotNetCoreCLI_5541a522-603c-47ad-91fc-a4b1d163081b/2.181.0/dotnet-build-helpers/Microsoft.TeamFoundation.distributedTask.MSBuild.Logger.dll" --configuration Release
我想知道使用 Microsoft.NET.Test.Sdk 参考的 dotnet 核心项目有什么特别之处。他们的构建过程有什么不同吗?有什么办法可以“强制”为他们进行静态代码分析?
任何帮助将不胜感激。
解决方法
好的。发生这种情况是“按设计”SonarQube 行为。可以在以下位置找到如何覆盖它的详细信息和方法:https://github.com/SonarSource/sonar-scanner-msbuild/wiki/Analysis-of-product-projects-vs.-test-projects