(注意:这些问题是在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
@Duncan Pocklington
这是否意味着您的工作环境可以正确分析 netcoreapp2.2 应用程序?
如果是这样,您的工作环境和非工作环境有什么不同?
不同之处在于新创建的项目没有TestCases。
在我们的项目中,我们有 Nunit 3,使用模拟的 TestCases。
经过sonarqube的输出,找到了这个.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
好的,这是有道理的。 Scanner for MSBuild 不分析测试代码,整个项目被分类为测试代码或产品代码(而不是逐个文件)。文档中的检测测试项目部分解释了扫描程序如何确定项目是否为测试项目,以及如何将项目明确标记为测试/非测试项目。
因此,使用 .csproj 中的以下代码作为 false 将项目标记为测试项目。
```
<!-- in .csproj -->
<PropertyGroup>
<!-- Mark the project as being a test project -->
<SonarQubeTestProject>false</SonarQubeTestProject>
</PropertyGroup>
```
现在去测试一下,谢谢
----------------------------------------------- ----------------------------------
成功了,C# 精通,项目分析完毕,感谢您的帮助
但我只是好奇为什么声纳扫描仪会有这样的行为?当项目完全拥有从 MVC、Nunit Cases 到 RestAPI 的所有组件时,它仍然只将其识别为测试项目吗?
之前没有添加任何项目组
这是否意味着 dotnet 框架项目需要在 MVC 分离 csproj 和 Nunit 分离 csproj 的意义上解耦,这有助于 sonarscanner 识别它是测试项目还是不是测试项目