2016-06-15 129 views
2

我想从SonarQube分析中排除GlobalSuppressions.cs文件,以便它不会在那里查看System.Diagnostics.CodeAnalysis.SuppressMessage指令。如何让SonarQube忽略GlobalSuppressions.cs文件?

这些位于每个项目的根目录中,但不在解决方案所在的根目录中:例如, enter image description here

我设置为admin:

enter image description here

也就是说,**/GlobalSuppressions.cs

每个解决方案都有很多项目,所以我想尽可能避免单独引用每个项目。

回答

0

我对这个问题的解决方案是使用PowerShell脚本来清​​除globalsupressions.cs文件,并从一个出错(CodeAnalysisRulesErrors.rulesetCodeAnalysisRulesUnitTestsErrors.ruleset)一个抛出警告(CodeAnalysisRules.rulesetCodeAnalysisRulesUnitTests.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{}