Sonarscanner无法分析netcoreapp2.2

时间:2019-07-04 15:57:06

标签: c# asp.net-mvc sonarqube continuous-integration code-analysis

我正在aspnetcore2.2项目上尝试使用声纳科。

该项目使用MSbuild版本-16.1.76.45076。

当我运行正式的dotnet-sonarscanner工具-版本4.6.2时, 仅分析CSS代码,而不分析项目中的C#,Javascript和其他代码。

我尝试了以下操作

使用不同的MSBuild:

我测试了不同的MSBuild版本,因为MSBuild从aspnetcore2.1更改为aspnetcore2.2

尝试过的版本

  • MSBuild-16.1.76.45076
  • MSBuild-15.1.0.0

两者返回的结果都是不分析CSS文件以外的任何文件。


使用不同的Sonarscanner工具:

我还继续使用不同的声纳扫描仪工具进行了检查

使用的声纳扫描仪工具

  • dotnet-sonarscanner-4.6.2
  • dotnet-sonarscanner-4.6.0
  • SonarScanner.MSBuild-适用于aspnetcore2.0 +的4.6.2
  • SonarScanner.MSBuild-用于aspnetcore 2.1.3
  • .NETFramework4.6

以上所有结果导致相同的结果,除了分析CSS文件外没有其他文件


Sonarqube中项目设置的验证:

要检查服务器端设置是否正确,我在aspnetcore的不同框架上进行了测试

经过测试的框架

  • aspnetcore 2.0
  • aspnetcore 2.1
  • aspnetcore 2.2

仅在aspnetcore2.2中,我面临此问题。

aspnetcore2.0,aspnetcore2.1的所有文件C#,HTML,Javascript和CSS进行了分析

这些还通过不同的MSBuild版本和sonarscanner工具进行了测试。


CLI命令已尝试

这些是用于复制问题的CLI

以下所有命令均未返回错误。

仅对aspnetcore2.2项目的CSS文件进行了分析

按上述说明以不同组合尝试了这些命令,以复制版本问题

dotnet sonarscanner begin /k:"<projectname>" /d:sonar.host.url="<sonarqserver>" /d:sonar.login="<usertoken>"
dotnet build
dotnet sonarscanner end /d:sonar.login="<usertoken>"
dotnet <pathto Sonarscanner.MSBuild.dll> begin /k:"<projectname>" /d:sonar.host.url="<sonarqserver>" /d:sonar.login="<usertoken>"
dotnet build
dotnet <pathto Sonarscanner.MSBuild.dll> end /d:sonar.login="<usertoken>"
dotnet sonarscanner begin /k:"<projectname>" /d:sonar.host.url="<sonarqserver>" /d:sonar.login="<usertoken>"
<pathto MSBuildversion.exe> build
dotnet sonarscanner end /d:sonar.login="<usertoken>"

预期结果是

  • 分析C#,JavaScript,CSS和HTML代码

实际结果是

  • 仅分析CSS文件

编辑1

回答以下问题

  • 期望的文件是否列在 .sonarqube \ out \ sonar-project.properties?
  • 将属性/d:sonar.verbose=true添加到开始步骤,然后运行 分析步骤再次出现。然后看看结束步骤的输出 警告(尝试搜索以下文件之一的文件名: 应该已经分析过了,对于“ C#”来说)
  • 您正在使用哪个版本的SonarQube?
  • SonarC#插件的哪个版本?

  • 是的,它们存在于.sonarqube \ out \ sonar-project.properties
  • /d:sonar.verbose=true到开始的步骤都经过测试并进行了分析,这些是从输出中观察到的关键点

  • 已完成文件的索引编制,并且在此过程中拾取了所有文件,包括.cs,.cshtml(剃刀页),缩小的js,缩小的CSS,CSS等。

  • 在建立索引期间,.cshtml文件被识别为“ web”,所有其他C#代码被识别为“ cs”语言
  • 在“运行传感器”阶段,仅使用以下传感器
DEBUG: Sensors : SonarCSS Metrics -> SonarCSS Rules -> JaCoCo XML Report Importer -> C# Properties -> JavaXmlSensor -> XML Sensor.

这将启动CSS分析,默认情况下,它使用的是node, -v, v8.12.0。处理的以下节点也用于.cshtml文件。  -从其余的传感器中,得到以下输出

对于 XML ,该文件在Sonar扫描仪开始期间已建立索引。 此文件是我们自己的不相关格式分析的文件,不是sonarqube的一部分

Sensor JavaXmlSensor [java]
2 source files to be analyzed
'AnalysisFile.xml' generated metadata as test  with charset 'UTF-8'
'wwwroot/XML/AnalysisFile_16-04-2019.xml' generated metadata as test  with charset 'UTF-8'
Sensor JavaXmlSensor [java] (done) | time=1284ms

对于 C#

Sensor C# Properties [csharp]
Analyzer working directory '<ProjectDir>\.sonarqube\out\0\output-cs' contains 5 .pb file(s)
Found Roslyn issues report
Sensor C# Properties [csharp] (done) | time=15ms
  1. 运行传感器以项目键的小写字母再次运行。这次, SensorC#中没有出现要分析的文件,如下所示
Sensor C# [csharp]
No files to analyze. Skip Sensor.
Sensor C# [csharp] (done) | time=0ms
  1. 运行传感器在项目上运行,这些时候以下输出如下
Java CPD Block Indexer' skipped because there is no related file in current project
Sensor Zero Coverage Sensor (done) | time=0ms
  1. 此后,.cs和.cshtml文件列表将得到以下内容
<filename>.cshtml generated metadata as test  with charset 'UTF-8'
<filename>.cs generated metadata as test  with charset 'UTF-8'
  1. 最后在发布分析之前给出WARN:之后的内容
WARN: Missing blame information for the following files
WARN:   * SonarQube.Analysis.xml
WARN: This may lead to missing/broken features in SonarQube
  1. 职位已发布

    • 我正在使用Sonarqube 7.9社区版
    • 我正在使用随Sonarqube 7.9 Server下载的默认插件-SonarC#-7.15(我不确定在Sonarqube 7.9 Server中是否安装了与默认版本相同的版本

    • 我尝试了dotnetcore2.1的以下步骤,分析了C#和其他文件

    • 如果由于内部分析而导致某些中断,也尝试在没有Inhouse XML Analysis文件的情况下进行以下操作。

问题仍然存在


1 个答案:

答案 0 :(得分:2)

注意:在Scanner for MSBuild repoSonarscanner Community上提出了问题- Sonarscanner社区中的答案

  

@armourshield,您对S4MSB回购中有关该问题的最新评论是:

I wanted to test the environment if it is right with the same tools
Created new projects for dotnetcore2.1 and dotnetcore2.2
When running the sonarq analysis it ran perfectly analyzing all the files
  

@ Duncan Pocklington

这是否意味着您具有一个可以正确分析netcoreapp2.2应用程序的工作环境?

如果是这样,在非工作环境中工作有什么区别?


  • 是的,正在分析新的netcoreapp2.2。

区别在于在新创建的项目中没有TestCases。 在我们的项目中,我们有使用模拟的Nunit 3,TestCases。

查看了声纳法的输出后,发现了这个.sonarqube\out\0\ProjectInfo.xml

    <?xml version="1.0" encoding="utf-8"?>
<ProjectInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.sonarsource.com/msbuild/integration/2015/1">
  <ProjectName>project</ProjectName>
  <ProjectLanguage>C#</ProjectLanguage>
  <ProjectType>Test</ProjectType>
  <ProjectGuid>ad649366-fea7-4513-91e3-90deb56bd30c</ProjectGuid>
  <FullPath>project.csproj</FullPath>
  <IsExcluded>false</IsExcluded>
  <AnalysisResults>
    <AnalysisResult Id="FilesToAnalyze" Location=".sonarqube\out\0\FilesToAnalyze.txt" />
  </AnalysisResults>
  <AnalysisSettings>
    <Property Name="sonar.cs.roslyn.reportFilePath">project\bin\Debug\netcoreapp2.2\project.dll.RoslynCA.json|project\bin\Debug\netcoreapp2.2\project.Views.dll.RoslynCA.json</Property>
    <Property Name="sonar.cs.analyzer.projectOutPath">project\.sonarqube\out\0</Property>
  </AnalysisSettings>
  <Configuration>Debug</Configuration>
  <Platform>AnyCPU</Platform>
  <TargetFramework>netcoreapp2.2</TargetFramework>
</ProjectInfo>
  

即使没有提及,整个项目也被认可为测试项目

以上内容可以追溯到.sonarqube \ conf \ sonar-project.properties,此处sonar.souces不使用cs文件,这些文件将进入.sonar.tests。如下所示

    sonar.projectKey=exp_test
sonar.working.directory=D:\\Work\\Experiment\\project\\.sonarqube\\out\\.sonar
sonar.projectBaseDir=project

AD649366-FEA7-4513-91E3-90DEB56BD30C.sonar.projectKey=exp_test:AD649366-FEA7-4513-91E3-90DEB56BD30C
AD649366-FEA7-4513-91E3-90DEB56BD30C.sonar.projectName=project
AD649366-FEA7-4513-91E3-90DEB56BD30C.sonar.projectBaseDir=project
AD649366-FEA7-4513-91E3-90DEB56BD30C.sonar.sourceEncoding=utf-8
AD649366-FEA7-4513-91E3-90DEB56BD30C.sonar.sources=
AD649366-FEA7-4513-91E3-90DEB56BD30C.sonar.tests=\
"project\\Areas\\Identity\\file.cs",\
"project\\Areas\\Identity\\Pages\\Account\\file.cshtml.cs",\
"project\\Areas\\Identity\\Pages\\Account\\file.cshtml.cs",\
"project\\Controllers\\file.cs",\
"project\\Controllers\\file.cs",\
"project\\Controllers\\file.cs",\
"project\\Controllers\\file.cs",\
"project\\Controllers\\file.cs",\
"project\\Controllers\\file.cs",\
"project\\Controllers\\file.cs",\
"project\\Controllers\\file.cs",\
"project\\Data\\file.cs",\
"project\\Data\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\Models\\file.cs",\
"project\\file.cs",\
"project\\REST\\Controllers\\file.cs",\
"project\\REST\\Controllers\\file.cs",\
"project\\REST\\Controllers\\file.cs",\
"project\\REST\\UnitTests\\file.cs",\
"project\\REST\\ViewModels\\file.cs",\
"project\\REST\\ViewModels\\file.cs",\
"project\\REST\\ViewModels\\file.cs",\
"project\\file.cs",\
"project\\ViewComponents\\file.cs",\
"project\\ViewModels\\file.cs",\
"project\\ViewModels\\file.cs",\
"project\\ViewModels\\file.cs",\
"project\\ViewModels\\file.cs",\
"project\\ViewModels\\file.cs",\
"project\\obj\\Debug\\netcoreapp2.2\\project.file.cs",\
"project\\obj\\Debug\\netcoreapp2.2\\project.file.cs",\
"project\\Areas\\Identity\\Pages\\Account\\file.cshtml",\
"project\\Areas\\Identity\\Pages\\Account\\file.cshtml",\
"project\\Areas\\Identity\\Pages\\Account\\_file.cshtml",\
"project\\Areas\\Identity\\Pages\\_file.cshtml",\
"project\\Areas\\Identity\\Pages\\_file.cshtml",\
"project\\Areas\\Identity\\Pages\\_file.cshtml",\
"project\\Views\\Account\\file.cshtml",\
"project\\Views\\Audit\\file.cshtml",\
"project\\Views\\Home\\file.cshtml",\
"project\\Views\\Home\\file.cshtml",\
"project\\Views\\Home\\file.cshtml",\
"project\\Views\\Home\\file.cshtml",\
"project\\Views\\Home\\file.cshtml",\
"project\\Views\\Home\\file.cshtml",\
"project\\Views\\Home\\file.cshtml",\
"project\\Views\\Home\\file.cshtml",\
"project\\Views\\Home\\file.cshtml",\
"project\\Views\\Incident\\file.cshtml",\
"project\\Views\\Incident\\file.cshtml",\
"project\\Views\\ProfileUpload\\file.cshtml",\
"project\\Views\\ProfileUpload\\file.cshtml",\
"project\\Views\\Shared\\Components\\Profile\\file.cshtml",\
"project\\Views\\Shared\\file.cshtml",\
"project\\Views\\Shared\\_file.cshtml",\
"project\\Views\\Shared\\_file.cshtml",\
"project\\Views\\Shared\\_file.cshtml",\
"project\\Views\\UserManagement\\file.cshtml",\
"project\\Views\\UserManagement\\file.cshtml",\
"project\\Views\\UserManagement\\file.cshtml",\
"project\\Views\\UserManagement\\file.cshtml",\
"project\\Views\\UserManagement\\file.cshtml",\
"project\\Views\\UserManagement\\file.cshtml",\
"project\\Views\\XMlParse\\file.cshtml",\
"project\\Views\\XMlParse\\file.cshtml",\
"project\\Views\\XMlParse\\file.cshtml",\
"project\\Views\\XMlParse\\file.cshtml",\
"project\\Views\\XMlParse\\file.cshtml",\
"project\\Views\\XMlParse\\file.cshtml",\
"project\\Views\\_file.cshtml",\
"project\\Views\\_file.cshtml",\
"project\\wwwroot\\css\\css-chart.css",\
"project\\wwwroot\\css\\site.css",\
"project\\wwwroot\\css\\site.min.css",\
"project\\wwwroot\\css\\stylesheet.css",\
"project\\wwwroot\\favicon.ico",\
"project\\wwwroot\\images\\favicon.ico",\
"project\\wwwroot\\images\\favicon.png",\
"project\\wwwroot\\images\\landing-page-background.jpg",\
"project\\wwwroot\\images\\no-user.jpg",\
"project\\wwwroot\\images\\user.png",\
"project\\wwwroot\\images\\yondrlogo.png",\
"project\\wwwroot\\images\\yondrlogoblack.png",\
"project\\wwwroot\\images\\yongroup-main.jpg",\
"project\\wwwroot\\js\\bootstrap-material-design.min.js",\
"project\\wwwroot\\js\\chartist.min.js",\
"project\\wwwroot\\js\\jquery-ui.min.js",\
"project\\wwwroot\\js\\jquery.dataTables.min.js",\
"project\\wwwroot\\js\\jquery.min.js",\
"project\\wwwroot\\js\\material-dashboard.min.js",\
"project\\wwwroot\\js\\perfect-scrollbar.jquery.min.js",\
"project\\wwwroot\\js\\popper.min.js",\
"project\\wwwroot\\js\\site.js",\
"project\\wwwroot\\js\\site.min.js",\
"project\\wwwroot\\lib\\bootstrap\\.bower.json",\
"project\\wwwroot\\lib\\bootstrap\\dist\\css\\bootstrap-grid.css",\
"project\\wwwroot\\lib\\bootstrap\\dist\\css\\bootstrap-grid.css.map",\
"project\\wwwroot\\lib\\bootstrap\\dist\\css\\bootstrap-grid.min.css",\
"project\\wwwroot\\lib\\bootstrap\\dist\\css\\bootstrap-grid.min.css.map",\
"project\\wwwroot\\lib\\bootstrap\\dist\\css\\bootstrap-reboot.css",\
"project\\wwwroot\\lib\\bootstrap\\dist\\css\\bootstrap-reboot.css.map",\
"project\\wwwroot\\lib\\bootstrap\\dist\\css\\bootstrap-reboot.min.css",\
"project\\wwwroot\\lib\\bootstrap\\dist\\css\\bootstrap-reboot.min.css.map",\
"project\\wwwroot\\lib\\bootstrap\\dist\\css\\bootstrap-theme.css",\
"project\\wwwroot\\lib\\bootstrap\\dist\\css\\bootstrap-theme.css.map",\
"project\\wwwroot\\lib\\bootstrap\\dist\\css\\bootstrap-theme.min.css",\
"project\\wwwroot\\lib\\bootstrap\\dist\\css\\bootstrap-theme.min.css.map",\
"project\\wwwroot\\lib\\bootstrap\\dist\\css\\bootstrap.css",\
"project\\wwwroot\\lib\\bootstrap\\dist\\css\\bootstrap.css.map",\
"project\\wwwroot\\lib\\bootstrap\\dist\\css\\bootstrap.min.css",\
"project\\wwwroot\\lib\\bootstrap\\dist\\css\\bootstrap.min.css.map",\
"project\\wwwroot\\lib\\bootstrap\\dist\\fonts\\glyphicons-halflings-regular.eot",\
"project\\wwwroot\\lib\\bootstrap\\dist\\fonts\\glyphicons-halflings-regular.svg",\
"project\\wwwroot\\lib\\bootstrap\\dist\\fonts\\glyphicons-halflings-regular.ttf",\
"project\\wwwroot\\lib\\bootstrap\\dist\\fonts\\glyphicons-halflings-regular.woff",\
"project\\wwwroot\\lib\\bootstrap\\dist\\fonts\\glyphicons-halflings-regular.woff2",\
"project\\wwwroot\\lib\\bootstrap\\dist\\js\\bootstrap.bundle.js",\
"project\\wwwroot\\lib\\bootstrap\\dist\\js\\bootstrap.bundle.js.map",\
"project\\wwwroot\\lib\\bootstrap\\dist\\js\\bootstrap.bundle.min.js",\
"project\\wwwroot\\lib\\bootstrap\\dist\\js\\bootstrap.bundle.min.js.map",\
"project\\wwwroot\\lib\\bootstrap\\dist\\js\\bootstrap.js",\
"project\\wwwroot\\lib\\bootstrap\\dist\\js\\bootstrap.js.map",\
"project\\wwwroot\\lib\\bootstrap\\dist\\js\\bootstrap.min.js",\
"project\\wwwroot\\lib\\bootstrap\\dist\\js\\bootstrap.min.js.map",\
"project\\wwwroot\\lib\\bootstrap\\dist\\js\\npm.js",\
"project\\wwwroot\\lib\\bootstrap\\LICENSE",\
"project\\wwwroot\\lib\\jquery-validation-unobtrusive\\.bower.json",\
"project\\wwwroot\\lib\\jquery-validation-unobtrusive\\jquery.validate.unobtrusive.js",\
"project\\wwwroot\\lib\\jquery-validation-unobtrusive\\jquery.validate.unobtrusive.min.js",\
"project\\wwwroot\\lib\\jquery-validation-unobtrusive\\LICENSE.txt",\
"project\\wwwroot\\lib\\jquery-validation\\.bower.json",\
"project\\wwwroot\\lib\\jquery-validation\\dist\\additional-methods.js",\
"project\\wwwroot\\lib\\jquery-validation\\dist\\additional-methods.min.js",\
"project\\wwwroot\\lib\\jquery-validation\\dist\\jquery.validate.js",\
"project\\wwwroot\\lib\\jquery-validation\\dist\\jquery.validate.min.js",\
"project\\wwwroot\\lib\\jquery-validation\\LICENSE.md",\
"project\\wwwroot\\lib\\jquery\\.bower.json",\
"project\\wwwroot\\lib\\jquery\\dist\\jquery.js",\
"project\\wwwroot\\lib\\jquery\\dist\\jquery.min.js",\
"project\\wwwroot\\lib\\jquery\\dist\\jquery.min.map",\
"project\\wwwroot\\lib\\jquery\\LICENSE.txt",\
"project\\wwwroot\\swagger-ui\\style.css",\
"project\\nlog.config",\
"project\\appsettings.Development.json",\
"project\\appsettings.json",\
"project\\Connected Services\\Application Insights\\ConnectedService.json",\
"project\\Properties\\launchSettings.json",\
"project\\internalLog.txt"

AD649366-FEA7-4513-91E3-90DEB56BD30C.sonar.cs.roslyn.reportFilePath=project\\bin\\Debug\\netcoreapp2.2\\project.dll.RoslynCA.json
AD649366-FEA7-4513-91E3-90DEB56BD30C.sonar.cs.analyzer.projectOutPath=project\\.sonarqube\\out\\0
AD649366-FEA7-4513-91E3-90DEB56BD30C.sonar.cs.analyzer.projectOutPaths=\
"project\\.sonarqube\\out\\0"
AD649366-FEA7-4513-91E3-90DEB56BD30C.sonar.cs.roslyn.reportFilePaths=\
"project\\bin\\Debug\\netcoreapp2.2\\project.dll.RoslynCA.json",\
"project\\bin\\Debug\\netcoreapp2.2\\project.Views.dll.RoslynCA.json"

AD649366-FEA7-4513-91E3-90DEB56BD30C.sonar.working.directory=project\\.sonarqube\\out\\.sonar\\mod0
sonar.host.url=sonarqurl
sonar.visualstudio.enable=false

sonar.modules=AD649366-FEA7-4513-91E3-90DEB56BD30C
  

在这里,源文件将用于测试而非源,对于新项目,源文件将用于源。

但是在当前项目中,它将进行测试


  

@ Duncan Pocklington

好,那很有意义。 MSBuild扫描程序不会分析测试代码,并且整个项目被归类为测试代码或产品代码(而不是逐个文件)。文档中的“检测测试项目”部分说明了扫描程序如何确定项目是否为测试项目,以及如何将项目明确标记为测试/非测试项目。


![Capture1314|690x489](upload://uT9VQpBfc0DN32gRujX3TFA7mdd.png)

因此,.csproj中的以下代码为false会将项目标记为Test项目。

```
<!-- in .csproj -->
<PropertyGroup>
<!-- Mark the project as being a test project -->
<SonarQubeTestProject>false</SonarQubeTestProject>
</PropertyGroup>
```

现在将对其进行测试,谢谢

--------------------------------------------------- ---------------------------------

它工作正常,C#锋利,并且对该项目进行了分析,谢谢您的帮助

但是我只是好奇为什么声纳扫描仪表现得如此?当项目完全具有从MVC到Nunit Cases到RestAPI的所有组件时,它仍然只将其识别为测试项目吗?

之前没有添加ProjectGroup

这是否意味着需要从MVC单独的csproj和Nunit单独的csproj的意义上分离点网框架项目,然后帮助sonarscanner识别它是测试项目还是不是测试项目