带有 C# 插件和 MSBuild Runner 的 SonarQube 不接受排除项

本文关键字:SonarQube 不接受 排除 Runner 插件 MSBuild 带有 | 更新日期: 2023-09-27 18:36:18

目前我有一个带有C#插件和MSBuild运行器的SonarQube 5.1.2实例,以分析1.200.000 LOC项目。我打算减少被分析的类,我创建了一个带有以下行的 sonar.properties 文件

sonar.exclusions=**/Databases/**/*.*

但在从分析中读取日志后,分析了数据库文件夹中的文件。 按照 Eric Starr 的指示,我在运行器的调用中设置了这个简单的排除规则:

"C:'sonarqube-5.1.2'bin'MSBuild.SonarQube.Runner.exe" begin /k:MyProject /n:MyProject /v:2 /d:sonar.exclusions="file:C:'codesource'Databases/**/*.*" /d:sonar.scm.provider=tfvc /d:sonar.tfvc.username=*************  /d:sonar.tfvc.password.secured={aes}*************************** "/d:sonar.cs.vscoveragexml.reportsPaths=C:'codesource'CodeCoverage'Results.coveragexml"

我发现运行器创建了一个sonar-project.properties文件,它包含许多位于数据库文件夹中的文件:

BC78C8C4-8ECD-47CB-9781-F621AE109FE4.sonar.projectName=myDatabase
BC78C8C4-8ECD-47CB-9781-F621AE109FE4.sonar.projectBaseDir=BC78C8C4-8ECD-47CB-9781-F621AE109FE4.sonar.projectName=myDatabase
BC78C8C4-8ECD-47CB-9781-F621AE109FE4.sonar.projectBaseDir=C:''codesource''Databases''myDatabase
BC78C8C4-8ECD-47CB-9781-F621AE109FE4.sonar.sources='
C:''codesource''Databases''myDatabase''Scripts''PreDeployment''PATCH_20150527_01.sql,'
C:''codesource''Databases''myDatabase''Scripts''PreDeployment''ROCOMMON.DBVERSION.sql,'
,'.....

据我了解,数据库文件夹中应该没有文件。我错了吗?

带有 C# 插件和 MSBuild Runner 的 SonarQube 不接受排除项

您正在使用 SonarQube Scanner for MSBuild,它与用于所有其他语言的常规 SonarQube Scanner 非常不同。

您尝试使用的sonar.exclude行只有在使用常规SonarQube扫描仪时才有效,因为这会占用Sonar-project.properties文件。SonarQube Scanner for MSBuild 只有一个 SonarQube.Analysis.Xml 文件,其中包含您可以调整的项目相关设置。

您可以对 SonarQube.Analysis.Xml 文件使用几种覆盖策略:

  • MSBuild *.*proj 文件中定义的项目特定属性(对应于 SonarQube 模块)可以覆盖:
  • 命令行中定义的属性 (/d:propertyName=value) 具有可以覆盖:
  • SonarQube.Analysis.xml配置文件中定义的属性
  • 在项目级别的SonarQube用户界面中定义的属性,可以覆盖所有内容
  • 全局级别的 SonarQube 用户界面中定义的属性,它不能覆盖任何内容

要从解决方案中排除特定文件夹或扩展名,请执行以下操作:

您需要将排除项添加到每个项目的 .csproj 文件中。这是您应该在主根节点中使用的语法,称为<Project...>并进入其中一个目标,最好是<Target Name="BeforeBuild"> 。希望下面的语法足够自述,但如果不是,请在此答案下发表评论,我会立即更新它。

<Target Name="BeforeBuild">
    <ItemGroup>
          <SonarQubeSetting Include="sonar.exclusions">
              <Value>**/Databases/**/*</Value>
          </SonarQubeSetting>
      </ItemGroup>
  </Target>

希望对您有所帮助!