SonarQube与C#插件和MSBuild Runner无法排除文件

7

我目前拥有一个安装了C#插件和MSBuild运行程序的SonarQube 5.1.2实例,用于分析一个120万行代码的项目。我打算减少被分析的类,因此创建了一个sonar.properties文件,并添加了如下一行:

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

但在分析日志后,发现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"

我发现runner创建了一个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,如果下面的答案解决了您的问题,请考虑通过单击复选标记接受它来表示向更广泛的社区表明您已经找到了解决方案,并为回答者和自己赢得了一些声誉。 - Foxocube
1个回答

14

您正在使用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>

希望能对您有所帮助!

来源


@XtianGIS 是的,这就是为什么你需要在.csproj文件中进行更改,因为它应该基于这些生成SonarQube.Analysis.xml文件。 - anthonymonori
忘掉那个 .xml 文件吧。你试过把 ignores 写入 .csproj 文件中了吗? - anthonymonori
4
是的,我是通过在<value>标记中使用逗号达到这个目的的,像这样:<Value>**/Databases/**/*,**/Properties/**/*.js,**/App_Config/*</Value>希望这有所帮助! - anthonymonori
2
如果有用的话,你实际上不需要将它放在目标中,只需在项目文件中拥有itemgroup即可。 - David Martin
2
@anthonymonori回复说这并不是我的情况。我可以使用/d:sonar.exclusions而不创建XML文件。在此页面上,它说两种方法都可以:https://github.com/SonarSource-VisualStudio/sonar-.net-documentation/blob/master/doc/appendix-2.md - bdovaz
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接