SonarQube Scanner for MSBuild:排除项

4
在SonarQube Runner中,可以通过sonar项目属性中的sonar.exclusions属性来管理被排除的项目。这样我们就可以将构建配置与代码库分开管理。
我们正在从Runner迁移到Scanner for 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中使用的方法)管理设置相比,这很难维护,容易出错且繁琐。
有其他替代方案吗?或计划在未来推出?
当项目文件夹称为***.Tests时,在将其添加到排除设置后仍会进行扫描。
[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]
3个回答

3

对于那些感兴趣的人...一年多过去了,我们仍然没有找到替代品,因此我们坚持以下解决方法,在构建之前添加一个小的powershell脚本到我们的TeamCity构建步骤中,负责将属性组添加到以Tests.csproj结尾的项目文件中,用于排除该项目不受Sonar分析的影响:

$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);
}

1

在分析参数中,没有关于管理这些属性组的文档,因为这非常难以做到。相反,您应该使用UI来管理排除:管理 > 常规设置 > 分析范围

了解更多,请参阅文档


当项目文件夹被命名为***.Tests时,尽管有排除设置,但仍会被扫描。 - Reinout Waelput
我在开头的帖子中添加了一些日志信息。 - Reinout Waelput
1
这很难做到正确,因为在分析参数中管理这些属性组没有文档可供参考。 - Jakub Pawlinski

0
为什么不这样做:
1.将您不想在 Sonar 下进行的所有项目分组到一个单独的文件夹中。 2.添加一个名为 Directory.Build.props 的文件,其中包含 <SonarQubeExclude>true</SonarQubeExclude>。 3.如果您在祖先文件夹中有此文件,请确保还导入它,以便不会失去构建功能。
适用于MSBuild 15(即VS 2017)
就是这样。

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