2016-06-01 132 views
0

我有一個使用StyleCop.Analyzers(基於Roslyn)的C#項目。當我們使用的MSBuild 14編譯這個項目中,我們看到了以下警告上調StyleCop.Analyzers:SonarQube覆蓋規則集和分析器

warning SA1005: Single line comment must begin with a space. 

到目前爲止,一切都很好。這就是我們所期望的。

然後,我們創建了一個簡單的腳本進行SonarQube內本彙編的MSBuild啓動/停止:

cd MyProjectRoot 
"D:\MSBuild.SonarQube.Runner-2.0\MSBuild.SonarQube.Runner.exe" begin /k:test /n:test /v:1.0.0 /d:sonar.host.url=https://mysonar.com/ /d:sonar.login=abc 
"C:\Program Files (x86)\MSBuild\14.0\bin\msbuild.exe" /p:Configuration=Debug /t:Rebuild 
"D:\MSBuild.SonarQube.Runner-2.0\MSBuild.SonarQube.Runner.exe" end 

當我們運行這一點,我們有一些奇怪的事情:我們沒有看到前面的警告SA1005。

通過查看MSBuild的輸出,我們看到,當MSBuild的是稱爲內SonarQube啓動/停止,我們有以下幾點:

C:\Program Files (x86)\MSBuild\14.0\bin\csc.exe ... /analyzer:..\packages\StyleCop.Analyzers.1.0.0\analyzers\dotnet\cs\Newtonsoft.Json.dll /analyzer:..\packages\StyleCop.Analyzers.1.0.0\analyzers\dotnet\cs\StyleCop.Analyzers.CodeFixes.dll /analyzer:..\packages\StyleCop.Analyzers.1.0.0\analyzers\dotnet\cs\StyleCop.Analyzers.dll 

但當了StyleCop是 SonarQube內使用啓動/停止,我們有:

C:\Program Files (x86)\MSBuild\14.0\bin\csc.exe ... /analyzer:C:\Users\myuser\AppData\Local\Temp\1\.sonarqube\.static\csharp_1.11.0\SonarAnalyzer.zip\SonarAnalyzer.CSharp.dll /analyzer:C:\Users\myuser\AppData\Local\Temp\1\.sonarqube\.static\csharp_1.11.0\SonarAnalyzer.zip\SonarAnalyzer.dll 

所以,你可以看到,我們沒有使用相同的分析儀!事實上,我根本沒有使用我配置的分析儀。此外,我們不使用相同的規則集。我沒有在MSBuild的輸出顯示它,但你可以信任我;)

所以兩個問題:

  • 我們如何與SonarQube編譯時啓用保護我們的配置代碼分析?
  • 如何在啓用SonarQube的情況下編譯時保存配置的RuleSet?

注意,我使用:

  • SonarQube的msbuild轉輪2.0
  • SonarQube服務器5.3
  • SonarQube C#插件5.2

回答

1

SonarQube覆蓋分析過程中使用的規則集。如果您希望您的規則集相同,則需要在SonarQube中設置質量配置文件以匹配您當前的規則集。如果你想使用它,有一個VS插件可以將你的規則集從SonarQube服務器同步到你的本地項目。

至於你需要使用以下SDK打包分析器了StyleCop分析:https://github.com/SonarSource-VisualStudio/sonarqube-roslyn-sdk/blob/master/README.md

一旦你這樣做的規則應可作爲聲納中使用質量門規則,將在自動運行分析。

+1

哇這是複雜的,很難保持與源代碼控制同步!在我們的實際使用案例中,我們使用自定義分析器來檢測違反我們編碼規則的情況。然後我們使用規則集來禁用部分代碼的一些規則。分析儀位於我們的nuget軟件包中。配置的主人只是**不能**是聲納。它必須是源代碼,因爲人們在修改代碼時會修改規則集+分析器的版本。 SonarQube強加的工作流程因此不適合我們....它應該是另一種方式:源控制是主,SonarQube是從屬。 – mabead

+1

在深入探索Sonar包含的目標文件之後,我的結論是,使用Sonar進行編譯會改變msbuild選項(例如:即使我的項目將其設置爲'true',但將錯誤設置爲'false')。這是非常不想要的。當聲納qube指標被捕獲時,我的構建過程現在不會表現相同:(使用SonarQube的項目應該被編譯兩次)1)通常編譯它以生成構建工件(例如:msi)。 2)啓用SonarQube重建它。這可確保由開發人員設置的所有編輯設置都不會被SonarQube更改。 – mabead

+0

我們沒有像你那樣使用聲吶。我們有一個每晚構建,只運行聲納構建並且不生成任何文物。我們有額外的構建產生的文物等(基本上是聲納本身) –