【问题标题】:SonarQube with C# plugin with MSBuild Runner does not take exclusions带有 C# 插件和 MSBuild Runner 的 SonarQube 不会排除
【发布时间】:2016-06-09 22:20:09
【问题描述】:

目前我有一个带有 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,\
,\.....

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

【问题讨论】:

  • 嗨@XtianGIS 如果下面的答案已经解决了您的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您找到了解决方案,并为回答者和您自己赢得了一些声誉。

标签: c# sonarqube sonar-runner sonarqube5.1


【解决方案1】:

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

您尝试使用的 sonar.exclude 行仅在您使用常规 SonarQube 扫描仪时才有效,因为它包含 Sonar-project.properties 文件。适用于 MSBuild 的 SonarQube 扫描仪只有一个 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>

希望对你有帮助!

Source

【讨论】:

  • 我升级到 SonarQube 5.3,在管理部分配置排除项,我也在 sonarqube 的命令行中设置了排除项。执行 runner 时,它会生成自己的 SonarQube.Analysis.xml 文件,其中包含在两个地方定义的排除模式。没有应用:(
  • @XtianGIS 是的,这就是为什么您需要在 .csproj 文件中进行更改,因为它也应该基于这些生成 SonarQube.Analysis.xml 文件。
  • @JesusAngulo 是的,我通过在 标记中使用逗号实现了这一点,如下所示:&lt;Value&gt;**/Databases/**/*,**/Properties/**/*.js,**/App_Config/*&lt;/Value&gt; 希望这会有所帮助!
  • 如果它对某人有用,您实际上并不需要在目标中使用它,您只需将项目组放在项目文件中即可。
  • @anthonymonori 回复我的情况不是这样。我可以在不创建 xml 文件的情况下使用 /d:sonar.exclusions。在此页面中,它说两种方式都有效:github.com/SonarSource-VisualStudio/sonar-.net-documentation/…
猜你喜欢
  • 1970-01-01
  • 2016-08-20
  • 2018-09-23
  • 2016-11-17
  • 2015-10-22
  • 2018-07-19
  • 2015-10-18
  • 2016-04-23
  • 2016-06-01
相关资源
最近更新 更多