我试图从 Sonars 静态代码和单元测试覆盖率分析中排除一些自动生成的代码(服务引用)。该项目是 C# .Net,Sonar 通过 Jenkins 在 Windows 服务器上运行。
在我的 sonar-project.properties 文件中,我可以使用 sonar.exclusions 属性排除各种其他文件和目录,但这不适用于路径中有空格的文件。
sonar.exclusions=**/Global.asax.cs, **/MyProject/Service References/*
鉴于上述示例,Global.asax.cs 文件被排除在解决方案的所有项目中,但服务引用却没有。
我试过用单引号和双引号将路径括起来。 我试过使用反斜杠来转义空格。 我尝试将路径设置为 **/MyProject/Service*/* 以利用通配符(可能有风险),但这也不起作用。
有人有解决办法吗?
最佳答案
我刚遇到同样的问题。我需要在文件夹脚本中排除项目“我的项目”中的 javascript 文件。我首先尝试了这个:
**/Scripts/**/*.js
这工作得很好,但我意识到它也会排除其他项目中的“脚本”文件夹。所以我把它改成这样:
**/My Project/Scripts/**/*.js
它停止工作了。我的第一直觉是项目名称中的空格是罪魁祸首。所以我尝试了你所做的同样的事情:
"**/My Project/Scripts/**/*.js"
'**/My Project/Scripts/**/*.js'
**/My\ Project/Scripts/**/*.js
但都没有用。
然后我偶然发现了这个论坛:sonarqube-archive.15.x6.nabble.com/Project-exclusions-for-Code-Coverage-not-working-C-td5023058.html
特别是这一行提供了答案:模块(.Net 项目)不是完全限定名称的一部分。您必须在模块(.Net 项目)级别定义排除项。
这意味着我的错误是项目名称中没有空格,而是根本不包含项目名称!我将过滤器更改为:
Scripts/**/*.js
瞧,文件被正确排除了。无需引号或转义。
当然,这仍然存在另一个项目中的“Scripts”文件夹也会被排除的问题。此处提供的信息:docs.sonarqube.org/display/SCAN/Excluding+Artifacts+from+the+Analysis可能对此有用。
我使用 Web 界面,而不是直接使用配置文件,但这也表明如果你有多个过滤器,逗号分隔的列表不应包含空格(路径中实际的除外),因为它们完全按字面解释。
关于c# - 如何排除 Sonar 路径中带空格的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37731763/