我正在aspnetcore2.2项目上尝试使用声纳科。
该项目使用MSbuild版本-16.1.76.45076。
当我运行正式的dotnet-sonarscanner工具-版本4.6.2时, 仅分析CSS代码,而不分析项目中的C#,Javascript和其他代码。
我尝试了以下操作
使用不同的MSBuild:
我测试了不同的MSBuild版本,因为MSBuild从aspnetcore2.1更改为aspnetcore2.2
尝试过的版本
两者返回的结果都是不分析CSS文件以外的任何文件。
使用不同的Sonarscanner工具:
我还继续使用不同的声纳扫描仪工具进行了检查
使用的声纳扫描仪工具
以上所有结果导致相同的结果,除了分析CSS文件外没有其他文件
Sonarqube中项目设置的验证:
要检查服务器端设置是否正确,我在aspnetcore的不同框架上进行了测试
经过测试的框架
仅在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>"
预期结果是
实际结果是
编辑1
回答以下问题
/d:sonar.verbose=true
到开始的步骤都经过测试并进行了分析,这些是从输出中观察到的关键点
已完成文件的索引编制,并且在此过程中拾取了所有文件,包括.cs,.cshtml(剃刀页),缩小的js,缩小的CSS,CSS等。
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
Sensor C# [csharp]
No files to analyze. Skip Sensor.
Sensor C# [csharp] (done) | time=0ms
Java CPD Block Indexer' skipped because there is no related file in current project
Sensor Zero Coverage Sensor (done) | time=0ms
<filename>.cshtml generated metadata as test with charset 'UTF-8'
<filename>.cs generated metadata as test with charset 'UTF-8'
WARN:
之后的内容WARN: Missing blame information for the following files
WARN: * SonarQube.Analysis.xml
WARN: This may lead to missing/broken features in SonarQube
职位已发布
我正在使用随Sonarqube 7.9 Server下载的默认插件-SonarC#-7.15(我不确定在Sonarqube 7.9 Server中是否安装了与默认版本相同的版本
我尝试了dotnetcore2.1的以下步骤,分析了C#和其他文件
问题仍然存在
答案 0 :(得分:2)
(注意:在Scanner for MSBuild repo和Sonarscanner 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
这是否意味着您具有一个可以正确分析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
在这里,源文件将用于测试而非源,对于新项目,源文件将用于源。
但是在当前项目中,它将进行测试
好,那很有意义。 MSBuild扫描程序不会分析测试代码,并且整个项目被归类为测试代码或产品代码(而不是逐个文件)。文档中的“检测测试项目”部分说明了扫描程序如何确定项目是否为测试项目,以及如何将项目明确标记为测试/非测试项目。
因此,.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识别它是测试项目还是不是测试项目