我有一個使用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
哇這是複雜的,很難保持與源代碼控制同步!在我們的實際使用案例中,我們使用自定義分析器來檢測違反我們編碼規則的情況。然後我們使用規則集來禁用部分代碼的一些規則。分析儀位於我們的nuget軟件包中。配置的主人只是**不能**是聲納。它必須是源代碼,因爲人們在修改代碼時會修改規則集+分析器的版本。 SonarQube強加的工作流程因此不適合我們....它應該是另一種方式:源控制是主,SonarQube是從屬。 – mabead
在深入探索Sonar包含的目標文件之後,我的結論是,使用Sonar進行編譯會改變msbuild選項(例如:即使我的項目將其設置爲'true',但將錯誤設置爲'false')。這是非常不想要的。當聲納qube指標被捕獲時,我的構建過程現在不會表現相同:(使用SonarQube的項目應該被編譯兩次)1)通常編譯它以生成構建工件(例如:msi)。 2)啓用SonarQube重建它。這可確保由開發人員設置的所有編輯設置都不會被SonarQube更改。 – mabead
我們沒有像你那樣使用聲吶。我們有一個每晚構建,只運行聲納構建並且不生成任何文物。我們有額外的構建產生的文物等(基本上是聲納本身) –