使用 SonarQube 对 .NET Core 单元测试项目 *.cs 文件进行静态代码分析
Static code analysis of .NET Core Unit test projects *.cs files with SonarQube
我有一个 Visual Studio 包含单元测试项目的 .NET Core 解决方案。所有项目都引用了 Microsoft.NET.Test.Sdk Nuget 包,据我所知,这是单元测试执行的“必备”。
我想对单元测试代码进行静态代码分析(因为它也是我们可交付成果的一部分)。然而,每次我 运行 将声纳分析作为 Azure DevOps 管道的一部分时——我在单元测试 *.cs 文件(以及单元测试项目中的其他文件)中看到“0”行代码SonarQube 报告。
我也发现了一件有趣的事。如果我删除对 Microsoft.NET.Test.Sdk Nuget 包的引用——执行静态代码分析没有任何问题,代码对 Sonar Qube 扫描仪可见。
此外 - 在 Azure DevOps 构建代理上 运行ning 时,“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 构建命令 运行 如下所示:
/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
我有一个 Visual Studio 包含单元测试项目的 .NET Core 解决方案。所有项目都引用了 Microsoft.NET.Test.Sdk Nuget 包,据我所知,这是单元测试执行的“必备”。
我想对单元测试代码进行静态代码分析(因为它也是我们可交付成果的一部分)。然而,每次我 运行 将声纳分析作为 Azure DevOps 管道的一部分时——我在单元测试 *.cs 文件(以及单元测试项目中的其他文件)中看到“0”行代码SonarQube 报告。
我也发现了一件有趣的事。如果我删除对 Microsoft.NET.Test.Sdk Nuget 包的引用——执行静态代码分析没有任何问题,代码对 Sonar Qube 扫描仪可见。 此外 - 在 Azure DevOps 构建代理上 运行ning 时,“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 构建命令 运行 如下所示:
/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