我想从 SonarQube 分析中排除 GlobalSuppressions.cs
文件,这样它就不会查看其中的 System.Diagnostics.CodeAnalysis.SuppressMessage
指令。
这些在每个项目的根目录中,但不在解决方案所在的根目录中:例如
我在管理中设置了这个:
即 **/GlobalSuppressions.cs
。
每个解决方案中都有很多项目,因此我希望尽可能避免单独引用每个项目。
我对这个问题的解决方案是使用 Powershell 脚本清除 globalsupressions.cs
文件并更改错误的规则集(CodeAnalysisRulesErrors.ruleset
或 CodeAnalysisRulesUnitTestsErrors.ruleset
) 到抛出警告的一个(CodeAnalysisRules.ruleset
或 CodeAnalysisRulesUnitTests.ruleset
),这样 SonarQube 就可以正确报告技术债务。
[CmdletBinding()]
param (
[string]$localWorkspace
)
begin{}
process
{
try
{
$localWorkspace = "$($env:SYSTEM_DEFAULTWORKINGDIRECTORY)\$($localWorkspace)"
$localWorkspace = $localWorkspace -replace "/" , "\"
$localWorkspace = $localWorkspace -replace "\\" , "\"
Write-Verbose $localWorkspace
#Work out top level directories, excluding system dirs
[System.Collections.ArrayList]$topLevelDirs = @()
$topLevelItem = Get-ChildItem $localWorkspace -Exclude @("node_modules", "packages", "Common", ".nuget", ".vs", "_Resharper.Caches", "Javascript")
foreach ($item in $topLevelItem)
{
if (Test-Path $item -PathType Container) {
Write-Verbose $item
$topLevelDirs.Add($item)
}
}
foreach ($topLevelFolder in $topLevelDirs)
{
Write-Verbose $topLevelFolder
$ServiceDirs = Get-ChildItem -Path $topLevelFolder -Filter GlobalSuppressions.cs -Recurse
foreach ($sd in $ServiceDirs)
{
Write-Verbose $sd
Clear-Content $sd.FullName
}
Get-ChildItem -Path $topLevelFolder -Filter *.csproj -Recurse | ForEach {
Write-Verbose $_.FullName
(Get-Content $_.FullName | ForEach { $_ -replace 'CodeAnalysisRulesErrors.ruleset', 'CodeAnalysisRules.ruleset' }) | Set-Content $_.FullName
(Get-Content $_.FullName | ForEach { $_ -replace 'CodeAnalysisRulesUnitTestsErrors.ruleset', 'CodeAnalysisRulesUnitTests.ruleset' }) | Set-Content $_.FullName
}
}
}
catch
{
write-host "Caught an exception:"
write-host "Exception Type: $($_.Exception.GetType().FullName)"
write-host "Exception Message: $($_.Exception.Message)"
}
}
end{}
我是一名优秀的程序员,十分优秀!