2016-05-27 34 views
0

我正在使用FxCop自定義規則在SonarQube上運行分析。 在SonarQube 4.5.7中,我將規則添加到一組規則中,然後激活它,然後運行分析。 要運行我使用下面的命令的序列的分析:C#項目中的SonarQube 4.5.7中的FxCop規則

1) MSBuild.SonarQube.Runner.exe begin /k:my.project.C-Sharp-ConsoleApp /n:C-Sharp-ConsoleApp /v:1.1 
2) "C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild" /T:Rebuild 
3) MSBuild.SonarQube.Runner.exe end 

我看到該規則被執行,因爲,當我運行第二個指令I讀日誌的以下部分:

... 
(RunCodeAnalysis target) -> 
MSBUILD : warning CR1000: MyRules : Field 'CSharpSortNames.m_variabile' is not in Hungarian notation. Field name should be prefixed with 's'. [C:\Users\Alessandro\Documents\Visual Studio 2015\Projects\C-Sharp-ConsoleApp\C-Sharp-ConsoleApp\C-Sharp-ConsoleApp.csproj] 

我的自定義規則checkID是CR1000,在第三個命令之後,我看到這個規則的錯誤被創建,但是web應用程序不讓我看到在哪裏。對於所有其他錯誤,Web應用程序讓我通過指向.cs文件的鏈接查看錯誤的確切位置。對我的規則來說,它並不是。
任何人都可以幫到我嗎? 進一步的問題是在SonarQube 5.4中激活了相同的規則,但是網絡應用程序不顯示錯誤。

回答

1

這裏的根本原因是FxCop使用來自PDB文件的信息來提供位置信息。但是,PDB僅包含對調試場景有用的信息,這意味着與不可執行代碼(例如:字段聲明或接口定義)關聯的FxCop規則違規將不具有可用的位置信息。 (FWIW,有一個公開的SonarQube issue用於解決這個問題,但除非SonarQube直接檢查源文件以嘗試定位字段聲明,否則它將不是微不足道的,我寧願懷疑它們可能不打擾它,因爲它簡化了經由羅斯林分析器來解決。)

另外的問題是在SonarQube 5.4相同的規則被激活但幅 應用程序不顯示錯誤。

這是因爲SonarQube的舊版本C# plugin完全忽略了沒有位置信息的FxCop違規。這在插件的version 5.2中得到了解決,該插件僅在2016年5月初出現(大概是您在安裝SonarQube 5.5時使用的)。它與SonarQube 5.4版本兼容,所以如果你喜歡,你應該可以在早期的安裝中使用它。

+0

感謝您的回答。接下來幾天我證明了你說的話,然後我用綠色標記你的評論 – grandeale8

+0

在sonarqube 5.4上,我有C#插件5.2,這沒有找到關於我的FxCop自定義規則的錯誤。 – grandeale8

+0

關於sonarqube 5.4我有C#插件5.2,這沒有找到關於我的FxCop自定義規則的錯誤。但是如果我將C#插件更新到v5.3,它會找到我的自定義規則。這是一個聲明的錯誤,所以它不顯示行代碼。因此,沒有位置信息的FxCop違規問題可以通過C#plugin v5.3解決。謝謝。 @NicoleCalinoiu – grandeale8