使用带有MSBuild Runner的C#插件的SonarQube不会进行排除

Xti*_*GIS 6 c# sonar-runner sonarqube sonarqube5.1

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

sonar.exclusions=**/Databases/**/*.*
Run Code Online (Sandbox Code Playgroud)

但是从分析中读取日志后,分析了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"
Run Code Online (Sandbox Code Playgroud)

我发现跑步者创建了一个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,\
,\.....
Run Code Online (Sandbox Code Playgroud)

据我所知,数据库文件夹中应该没有文件.我错了吗?

ant*_*ori 12

您正在使用SonarQube扫描仪进行MSBuild,这与用于所有其他语言的常规SonarQube扫描仪非常不同.

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>
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!

资源

  • @JesusAngulo是的,我通过在<value>标签内使用逗号实现了这一点,如下所示:````<Value>**/Databases/**/*,**/Properties/**/*.js,**/App_Config/*</ Value>```希望这有帮助! (4认同)
  • 如果它对某人有用,你实际上并不需要它在一个目标中,你可以在你的proj文件中有itemgroup. (2认同)
  • @anthonymonori回复这不是我的情况。我可以使用/d:sonar.exclusions而不创建xml文件。在此页面中,这两种方法均起作用:https://github.com/SonarSource-VisualStudio/sonar-.net-documentation/blob/master/doc/appendix-2.md (2认同)