在SonarQube运行器中,可以通过声纳项目属性中的sonar.exclusions属性管理排除的项目。这样我们就可以管理与代码库分开的构建配置。
我们正在从跑步者迁移到MSBuild的扫描程序,以便在我们的代码上运行FXCop规则。
将sonar-project.properties文件保留在项目的根文件夹中会导致“MSBuild.SonarQube.Runner.exe end”命令中出现异常。 SonarQube Scanner for MSBuild无法理解 sonar-project.properties文件。从以下文件夹中删除这些文件:[folder]
我现在可以看到的排除特定项目的唯一选项(实际上所有名称以.Test,.Tests,.Testing,.UnitTests等结尾的项目)似乎是在每个受影响的项目中向一个propertyGroup添加一个项目属性: <SonarQubeExclude>true</SonarQubeExclude>
与管理根级别(我们为jenkins所做的)或构建设置(我们目前在TeamCity中使用)中的设置相比,这很难维护,容易出错并且很麻烦。
还有其他选择吗?还是计划将来?
当调用项目文件夹时***。测试后,在将其添加到排除设置后仍会进行扫描。
[14:14:14][Step 12/23] INFO: ------------- Scan MyProject.Tests
[14:14:14][Step 12/23] INFO: Excluded sources for coverage:
[14:14:14][Step 12/23] INFO: **/*.Tests/**/*
[14:14:14][Step 12/23] INFO: **/*.Test/**/*
[14:14:14][Step 12/23] INFO: Base dir: C:\SomeFolder\MyProject\Modules\MyProject.Tests
[14:14:14][Step 12/23] INFO: Working dir: C:\SomeFolder\MyProject\.sonarqube\out\.sonar\{Sonar_Project}_{some guid}
[14:14:14][Step 12/23] INFO: Test paths: [I removed some classes], Utils/SomeTests.cs, Enum/dummy.resx, app.config, Compression/TestData/data1.FRM, Compression/TestData/data1.zip, Compression/TestData/data1.Off.zip, packages.config
[14:14:14][Step 12/23] INFO: Source encoding: UTF-8, default locale: en_US
[14:14:14][Step 12/23] INFO: Index files
[14:14:15][Step 12/23] INFO: 45 files indexed
[14:14:15][Step 12/23] INFO: Quality profile for cs: [some profile]
[14:14:15][Step 12/23] INFO: Quality profile for vb: [some profile]
答案 0 :(得分:1)
没有关于在分析参数中管理这些属性组的文档,因为很难做到正确。相反,您应该使用UI来管理排除项:管理&gt;一般设置&gt;分析范围。
更多信息,see the docs。
答案 1 :(得分:0)
对于那些感兴趣的人...一年多之后,我们没有找到替代方法,因此我们坚持以下变通方法,即在构建之前将一个小的powershell脚本添加到TeamCity构建步骤中,该脚本负责添加一个属性组以将项目从Sonar分析中排除到以Tests.csproj结尾的项目文件中:
$dir = "C:\Temp\ExcludeProjectsFromSonar"
Get-ChildItem $dir *Tests.csproj -recurse |
% {
$root = [xml](gc $_.FullName);
$project = $root.Project;
$propertyGroup = $root.CreateElement("PropertyGroup", $project.NamespaceURI);
$comment = $root.CreateComment("Exclude the project from analysis");
$sonarExclude = $root.CreateElement("SonarQubeExclude", $project.NamespaceURI);
$sonarExclude.InnerText = 'true';
$propertyGroup.AppendChild($comment);
$propertyGroup.AppendChild($sonarExclude);
$project.AppendChild($propertyGroup);
$root.Save($_.FullName);
}
答案 2 :(得分:0)
为什么不执行以下操作:
Directory.Build.props
添加文件<SonarQubeExclude>true</SonarQubeExclude>
自MSBuild 15(即VS 2017)开始工作
就是这样。