Ausführen von .NET 4.0 statische Codeanalyse (FxCop) mit VS 2010 Professional

8

Ich habe VS 2010 Professional (was im Gegensatz zu Premium nicht den Zugriff auf die Codeanalyse-Konfiguration innerhalb der IDE beinhaltet) und a C # 4-Lösung mit vielen Dutzend Projekten. Ich möchte statische Code-Analysen als Teil der Lösungszusammenstellung durchführen.

Die möglichen Wege, die ich mit Hilfe von SO und Google identifiziert habe, sind:

  • Bearbeiten Sie alle .csproj in der Lösung, um einen Aufruf des eigenständigen FxCop 10 als Post-Build-Ereignis einzubeziehen. Vorteile: passiert bei jedem Kompilieren für jedes neu erstellte Projekt. Contra: Muss zusätzliche Maßnahmen ergreifen, um sicherzustellen, dass neue Projekte diese Spezifikation haben

  • Erstellen Sie ein neues Projekt oder identifizieren Sie ein vorhandenes Projekt, das aufgrund seiner Projektabhängigkeiten immer als letztes erstellt wird. Geben Sie (nur) diesem Projekt ein Post-Build-Ereignis, das FxCop auf allen Assemblys im (gemeinsamen) Ausgabeordner ausführt. Vorteile: nur eine Datei zum Aktualisieren und weniger Möglichkeit, dass zukünftige Projekte nicht analysiert werden. Nachteile: Die Unwägbarkeiten von Build-Abhängigkeiten können bedeuten, dass dies nicht funktioniert

  • Aktualisieren Sie die VS-Instanzen aller Entwickler mit einem Add-In oder einem Makro, das FxCop nach jedem Build ausführt. Ich mag diese Idee überhaupt nicht.

Gibt es noch andere Optionen, die deutlich besser sind als die oben genannten? Gibt es irgendwelche Einschränkungen oder Beobachtungen, die ich beachten muss, um eine der oben genannten Arbeiten zu machen?

Ich möchte auch, dass FxCop als Teil eines Builds mit MSBuild 4.0 -powered auf einem Build-Server ausgeführt wird. Welche der Optionen erlaubt mir Code-Analyse-Regelsätze zwischen Desktop-Kompilierung und Bulid-Server-Kompilierung wiederzuverwenden?

Ich habe bereits verwandte, aber nicht identische bereits bestehende Fragen gelesen, einschließlich:

AakashM 06.10.2010, 12:02
quelle

6 Antworten

7

Um FxCop als Teil des Build-Scipt (MSBuild) zu integrieren, verwende ich den FxCop-Task von MSBuild.Community.Tasks . Mit FxCop erstelle ich ein FxCop-Projekt (FxCopProject.FxCop), das die zu verwendenden Regeln und die zu untersuchenden Baugruppen definiert.

%Vor%     
mcdon 27.10.2010, 18:04
quelle
3

Ich habe Hudson als Build-Server verwendet, der nach dem Erstellen von .NET-Anwendungen eine Codeanalyse durchführen würde. Um es für diesen Zweck zu verwenden, müssen Sie zwei Plugins installieren:

  • MSBuild Plugin zum Erstellen von .NET-Anwendungen.
  • Verstöße Plugin, das Codeanalyseergebnisse meldet und FxCop und StyleCop unterstützt.

Hudson müsste für die Ausführung von FxCop und StyleCop konfiguriert werden, aber das ist nicht sehr schwer mit Batch-Dateien. Der Vorteil besteht darin, dass keine Ihrer Projektdateien konfiguriert werden muss, da die Codeanalyse extern durchgeführt wird. das heißt, nicht über Visual Studio.

Sie können Hudson so konfigurieren, dass die Codeanalyse als tägliche Aufgabe oder sogar bei jeder Änderung an Ihren Anwendungen durchgeführt wird. Anschließend konnte jeder in Ihrem Entwicklungsteam die Ergebnisse der Codeanalyse über Hudson anzeigen, um festzustellen, ob sie Verstöße begangen haben.

    
Bernard 06.10.2010 14:09
quelle
2

Ich habe FxCop für eine Weile nicht benutzt, aber wenn du viele Projekte hast, vermute ich, dass es für jedes Projekt einmal und nicht nur einmal am Ende laufen wird, wird es schmerzhaft sein. Sie könnten versuchen (oder zumindest von beginnen) etwas wie dies . Kurz gesagt, Sie haben ein Uber-Projekt mit Zielen, die von der Erstellung Ihrer gesamten Lösung abhängen, gefolgt von FxCop (oder Komponententests usw.). Sie rufen das Uber-Projekt mit einer Batch-Datei aus dem Projektmappen-Explorer auf. p>

Es ähnelt Ihrem zweiten Vorschlag, hat aber keine Abhängigkeit von der Erstellungsreihenfolge und erfordert nicht, dass Sie an neuen Projekten fummeln. Leider bricht seine aktuelle Inkarnation die normalen Abkürzungen für den Aufbau innerhalb von VS, und es wird wahrscheinlich leicht zufällig zu umgehen sein, aber es könnte möglich sein, es zu verfeinern.

Es könnte auch sauberer und besser in VS integriert sein, um ein MSBuild-Ziel für die Ausführung von FxCop zu verwenden, als einen Post-Build-Schritt.

    
shambulator 06.10.2010 12:55
quelle
1

Eine Alternative zu FxCop wäre die Verwendung des Tools NDepend, mit dem Code-Regeln über C # LINQ-Abfragen (nämlich CQLinq) . Haftungsausschluss: Ich bin einer der Entwickler des Tools

Mehr als 200 Coderegeln werden standardmäßig vorgeschlagen. Das Anpassen vorhandener Regeln oder das Erstellen eigener Coderegeln ist dank der bekannten C # LINQ-Syntax problemlos möglich.

Regeln können in in Visual Studio verifiziert werden und zur Build-Prozesszeit in generierter HTML + JavaScript-Bericht .

    
quelle
0

Erstellen Sie eine benutzerdefinierte Buildaktivität (die basierend auf einer Eigenschaft ausgeführt wird, die wir über die Builddefinition festlegen):

  1. Meine benutzerdefinierte Aktivität sucht nach allen * .csproj-Dateien im Stammordner.
  2. Aktualisiert alle csproj-Dateien, um die Eigenschaft "

    hinzuzufügen

    wahr

  3. Speichern Sie die csproj-Datei.

  4. Dies führt nun dazu, dass die Codeanalyse beim Kompilieren ausgeführt wird.

Dies bedeutet, dass wir kontrollieren können, wann die Codeanalyse ausgeführt werden muss oder nicht. Wir müssen es nicht jedes Mal ausführen, wenn wir den Code erstellen.

Bitte lesen Sie, dass Sie nicht die Premium-VS haben, aber Sie können denselben Prozess verwenden, um das Build-Ereignis der csproj-Datei nach der Build-Zeit zu aktualisieren.

    
Isaiah4110 23.01.2014 16:51
quelle
0

Ich weiß, das ist eine alte Frage, aber die beste Option IMO ist es, SonarQube mit dem C # -Plugin zu verwenden, um Ihre Analyse zu machen. Dies behandelt FxCop als eine der Analysemöglichkeiten, sowie das Ausführen von StyleCop- und ReSharper-Analysen (mit dem kostenlosen Befehlszeilen-Runner) und das Kompilieren in einer Webschnittstelle.

Es dauert eine Weile, bis das erste Projekt eingerichtet ist, aber die Einrichtung nachfolgender Projekte ist sehr ähnlich und kann von Ihrem CI-Server ausgelöst werden.

    
caveman_dick 11.08.2014 12:39
quelle