2014-09-25 4 views
9

Standardmäßig wird Code-Analyse nur für Projekte durchgeführt, die kompiliert werden. Wenn ich MSBuild über die Befehlszeile ausfühle, wird die Codeanalyse nur zum ersten Mal ausgeführt. Bei nachfolgenden Aufrufen wird die Codeanalyse übersprungen.Erzwingen, dass MSBuild Code-Analyse ohne Neukompilierung ausführt

Hintergrund: Ich möchte CA-Regeln bewerten und sehen, wie viele Warnungen in unserem Code beim Einschalten einer Regel angezeigt werden. Dafür möchte ich nicht alles neu kompilieren - das braucht etwas Zeit - aber führe einfach die Codeanalyse erneut aus. Wie können Sie das erreichen?

Ich verwende Visual Studio 2013 und MSBuild 12.0.

Auch explizit auf Codeanalyse Schalt nicht hilft:

msbuild DesktopBuild.proj /p:RunCodeAnalysis=true 

Antwort

9

Es scheint, dass

  1. del /s *.lastcodeanalysissucceeded
  2. msbuild DesktopBuild.proj /p:RunCodeAnalysis=true

scheint zu funktionieren. Der erste Schritt führt dazu, dass die Codeanalyse die vorherigen Läufe "vergisst", und der zweite Schritt erzwingt, dass sie für jedes Projekt ausgeführt wird, auch wenn die Codeanalyse in einem Projekt nicht aktiviert ist. Wenn dies wiederholt ausgeführt wird, werden die bereits kompilierten Projekte nicht erneut kompiliert, nur die Codeanalyse wird erneut ausgeführt.

+0

Hey, gibt es eine Möglichkeit, den ersten Schritt in der XAML-Builddefinition auszuführen, ohne eine separate Batchdatei zur Quellcodeverwaltung hinzuzufügen? –

2

Ich würde versuchen, FxCopCmd.exe verwenden, können sie in der Regel in C:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop finden. Es wird von CodeAnalysis in Visual Studio verwendet, Sie sollten es mit geeigneten Parametern verwenden können.

+0

Das Problem mit diesem Ansatz besteht darin, dass wir zwei verschiedene Regelsätze haben und jedes Projekt definiert, welche dieser Regelsätze verwendet wird. Wir haben ein paar hundert Projekte, also wie würde ich FxCopCmd so ausführen, dass jedes Projekt/DLL seinen konfigurierten Regelsatz verwendet? – Tobias

+1

FxCopCmd hat eine Option, um eigene Regeln zu setzen (/ rs) oder sogar bestimmte Regeln ein- und auszuschalten. – tdragon

+0

Und wie würde mir das helfen? Wie ich geschrieben habe, gibt es ein paar hundert Projekte und ich kann den Regelsatz nicht für jede Assembly manuell liefern. Dies muss automatisch geschehen, indem Sie die .csproj-Datei verwenden. Und ich denke, das ist mit FxCopCmd nicht möglich. – Tobias

2

In der Projektdatei einfach CodeAnalysisGenerateSuccessFile auf false setzen.