Sonarscanner не анализирует netcoreapp2.2 - PullRequest
2 голосов
/ 04 июля 2019

Я пытаюсь использовать sonarqube в моем проекте aspnetcore2.2.

В проекте используется версия MSbuild - 16.1.76.45076.

Когда я запускаю официальный инструмент dotnet-sonarscanner - версию 4.6.2анализируется только CSS-код, а не C #, Javascript и другие коды из проекта.

Я пробовал следующее,

Использование различных MSBuilds:

Я тестировал разные версии MSBuild, так как в MSBuild произошел переход с aspnetcore2.1 на aspnetcore2.2

Попытки версии

  • MSBuild- 16.1.76.45076
  • MSBuild - 15.1.0.0

Оба возвращаются с одинаковым результатом, не анализируя никаких файлов, кроме файлов CSS.


Использование различных инструментов Sonarscanner:

Я также пошел дальше и проверил с помощью различных инструментов Sonarscanner

Используемые инструменты Sonarscanner

  • dotnet-sonarscanner - 4.6.2
  • dotnet-sonarscanner - 4.6.0
  • SonarScanner.MSBuild - 4.6.2 для aspnetcore2.0 +
  • 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, используемый для репликации проблемы

Все приведенные ниже команды не возвращали ошибку.

Вкл.Либо CSS-файлы анализировались для проектов aspnetcore2.2

Команды были опробованы в различных комбинациях, как описано выше, для дублирования проблем с версиями

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 (Razor Pages), минимизированные 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
Запуск датчиков запускается снова с нижним регистром клавиши проекта.На этот раз файл для анализа не появляется в SensorC # , как показано ниже
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
После этого список файлов .cs и .cshtml получает следующее
<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 Community Edition
  • Я использую плагин по умолчанию, который загружается с сервера Sonarqube 7.9 -SonarC # - 7.15 (Я не уверен, что эта версия устанавливается по умолчанию в Sonarqube 7.9 Server

  • Я попытался выполнить следующие шаги для dotnetcore2.1, C # и других файловбыли проанализированы

  • Также попытались выполнить следующие действия без файла Inhouse XML Analysis, если из-за этого произошел сбой в анализе.

Проблема по-прежнему сохраняется


1 Ответ

2 голосов
/ 09 июля 2019

( Примечание : вопросы задавались в Сканере для MSBuild repo и Сообщество Sonarscanner - Ответ в Сообществе 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 правильно анализируется?

Если да, что отличается между вашей рабочей и неработающей средой?


  • Да, новый 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

Здесь исходные файлы собираются для тестирования, а не для исходных текстов, для нового проекта - исходники.

Но с текущим проектом он идет на тесты


@ Дункан Поклингтон

Хорошо, это имеет смысл. Тестовый код не анализируется сканером для MSBuild, и весь проект классифицируется как тестовый код или код продукта (а не файл за файлом). Раздел «Обнаружение тестовых проектов» в документации объясняет, как сканер решает, является ли проект тестовым проектом или нет, и как явно пометить проект как тестовый / не тестовый проект.


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

Таким образом, следующий код в .csproj в качестве ложного обозначает проект как тестовый проект.

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

сейчас опробую, спасибо

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

Это сработало, C # Sharp и проект были проанализированы, спасибо за помощь

Но мне просто интересно, почему сонарсканер так себя вел? Когда проект полностью имел все компоненты из MVC, Nunit Cases to RestAPI все еще распознавал его только как тестовый проект?

ProjectGroup не были добавлены до

Означает ли это, что проекты среды dotnet должны быть отделены в том смысле, что MVC разделяет csproj и Nunit разделяет csproj, что помогает sonarscanner определить, что это тестовый проект или не тестовый проект

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...