2016-05-27 30 views
0

Ich tring, um Analyse auf SonarQube zu laufen, unter Verwendung einer FxCop-Gewohnheitsregel. In SonarQube 4.5.7 füge ich die Regel zu dem Regelwerk hinzu, ich aktiviere es und führe dann die Analyse aus. Um die Analyse verwende ich die Reihenfolge der folgenden Befehle ausführen:FxCop-Regel in SonarQube 4.5.7 auf C# -Projekt

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 

Ich sehe, dass die Regel ausgeführt wird, weil, wenn ich den zweiten Befehl ausführen ich den folgenden Teil des Protokolls lesen:

... 
(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] 

Meine benutzerdefinierte Regel CheckID ist CR1000, und nach dem dritten Befehl sehe ich, dass ein Fehler dieser Regel gegründet ist, aber die Web-App lässt mich nicht sehen, wo. Bei allen anderen Fehlern zeigt mir die Web-App die genaue Zeile, wo der Fehler ist, durch einen Link zur .cs-Datei. Für meine Regel gilt das nicht.
Kann mir jemand dabei helfen? Weiteres Problem ist in SonarQube 5.4 die gleiche Regel aktiviert ist, aber Web-App zeigt den Fehler nicht.

Antwort

1

Der Grund dafür ist, dass FxCop Informationen aus der PDB-Datei für die Bereitstellung von Standortinformationen verwendet. Die PDB enthält jedoch nur Informationen, die für das Debuggen von Szenarien nützlich wären, was bedeutet, dass für FxCop-Regelverletzungen, die mit nicht ausführbarem Code (z. B. Felddeklarationen oder Schnittstellendefinitionen) verknüpft sind, keine Standortinformationen verfügbar sind. (FWIW, es gibt einen offenen SonarQube issue, um dies anzugehen, aber es wäre nicht trivial, wenn SonarQube die Quelldateien direkt untersuchen würde, um zu versuchen, die Felddeklaration zu finden. Ich vermute eher, dass sie sich nicht darum kümmern, da es einfacher ist Adresse über einen Roslyn Analysator.)

ein weiteres Problem ist in Sonarqube 5.4 die gleiche Regel aktiviert, aber Web- App zeigt nicht den Fehler.

Das ist, weil ältere Versionen des C# plugin für Sonarqube vollständig ohne Standortinformationen FxCop Verletzungen ignoriert. Dies wurde in version 5.2 des Plugins adressiert, das erst Anfang Mai 2016 wurde (und vermutlich das ist, was Sie bei der Installation von SonarQube 5.5 verwendet haben). Es ist kompatibel mit Version 5.4 von SonarQube, Sie sollten es also mit Ihren älteren Installationen verwenden können, wenn Sie möchten.

+0

Danke für die Antwort. Nächsten Tagen beweise ich, was du gesagt hast, dann markiere ich deinen Kommentar. – grandeale8

+0

Auf Sonarqube 5.4 hatte ich C# -Plugin 5.2, das fand keine Fehler über meine FxCop-Custom-Regel. – grandeale8

+0

Auf Sonarqube 5.4 hatte ich C# -Plugin 5.2, das fand keine Fehler über meine FxCop-Custom-Regel. Aber wenn ich das C# -Plugin auf V5.3 aktualisiere, finde ich meine benutzerdefinierte Regel. Es ist ein Deklarationsfehler, daher wird der Zeilencode nicht angezeigt. So wird FxCop Verletzung ohne Standortinformationen mit C# Plugin v5.3 angesprochen. Vielen Dank. @ NicoleCalinoiu – grandeale8