2016-08-12 58 views
0

目前我們在構建過程中正在運行SonarQube分析。我們希望在Visual Studio 2015本地運行我們的質量配置文件。爲此,我們爲Visual Studio創建了一個規則集,並打開了在我們的質量配置文件中啓用的規則。 SonarLint對此進行了整合,但FxCop規則並未同步(目前)。啓用FxCop規則時,Visual Studio會凍結。所以這不是我們的選擇。SonarQube MSBuild跑步者不能使用移植的FxCop Roslyn規則添加到項目中

我們嘗試過的另一個選擇是創建基於FxCop和Roslyn的規則集。正在嘗試創建一個僅限roslyn的規則集。所以我們已經添加了FxCop port to Roslyn rules NuGet包出來的項目。但是當我們使用MSBuild Runner 2.1運行SonarQube時,我們收到以下錯誤:MSBUILD : error : CA0059 : Invalid settings passed to CodeAnalysis task. See output window for details.即使未打開這些規則或使用默認的Microsoft規則集,我們也會收到此錯誤。

當我看看的MSBuild的日誌我看到下面的(爲便於閱讀,刪除了很多的規則):

/rulesetdirectory:"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\\Rule Sets" 
/rule:"-C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\FxCop\\Rules" 
/ruleid:"-Microsoft.Performance#CA1820" 
/ruleid:"-Microsoft.Reliability#CA2002" 
/ruleid:"-Microsoft.Usage#CA1816 
     -Microsoft.Usage#CA2208" 
/ruleid:"-Microsoft.Usage#CA2216" 
/searchgac /ignoreinvalidtargets 
/forceoutput /successfile /ignoregeneratedcode /saveMessagesToReport:Active,Excluded 
/timeout:120 
/reportMissingIndirectAssemblies 

Switch '/microsoft.usage#ca2208" /ruleid' is an unknown switch. 

Type 'FxCopCmd.exe /?' for help on command-line arguments. 
MSBUILD : error : CA0059 : Invalid settings passed to CodeAnalysis task. See output window for details. 
Code Analysis Complete -- 1 error(s), 0 warning(s) 

它看起來像SonarQube不正確產生這種情況的FxCop的說法。有誰知道這個問題的解決辦法?

在此先感謝。

我創建了一個GitHub的攝製哪裏這個問題可以被複制:https://github.com/mvdiemen/SonarQubeFxCopRoslyn所有的

+0

你可以與我們分享一個最小的工作(失敗)repro? – Tamas

+0

@ Tamas-SonarSourceTeam我在Github上創建了一個repro,因此可以重現問題。如果您有任何問題或者無法重現問題,請與我聯繫。在此先感謝您的幫助! – mrtentje

+0

@ Tamas-SonarSourceTeam是否可以重現該問題?你有(快速)修復如何解決這個問題?在此先感謝 – mrtentje

回答

2

首先,目前的MSBuild的掃描儀不支持通過羅斯林運行的FxCop。原因在於它公開了旨在供FxCop以特定方式使用的規則,與傳遞給Roslyn的其他規則不同。

您正在使用的分析儀,特別是System.Runtime.Analyzers-1.2.0-beta2,將使用屬性CodeAnalysisRuleSetOverrides覆蓋爲FxCop設置的規則。

MSBuild的目標爲CodeAnalysis,它調用FxCopCmd.exe。當定義CodeAnalysisRuleSetOverrides屬性時,FxCopCmd將接收該屬性中定義的所有規則ID作爲參數。

您發佈的錯誤來自定義該屬性時System.Runtime.Analyzers-1.2.0-beta2分析器中的錯字。 packages\System.Runtime.Analyzers-1.2.0-beta2\build\System.Runtime.Analyzers.props中缺少分號,導致FxCopCmd.exe失敗。

請注意,CodeAnalysisRuleSetOverrides將覆蓋由MSBuild掃描程序(通過另一個屬性,CodeAnalysisRuleSet)定義的規則集。這是無意識的,因爲FxCop將使用您在項目中使用的分析器定義的規則,而不是在SonarQube服務器中定義的質量配置文件中激活的規則。

我將修復Scanner for MSBuild使用的target文件,以重置屬性CodeAnalysisRuleSetOverrides

要使用MSBuild的掃描儀,您應該移除這些分析儀。更多的信息在這裏:http://docs.sonarqube.org/display/SCAN/From+the+Command+Line