Ich hab bereits darüber gebloggt, wie man StyleCop im MSBuild Script verwenden kann. Allerdings möchte man eigentlich noch eine StyleCop Settings Datei haben und diese bei jedem Build im Visual Studio auch ausführen lassen. Dies geht mit relativ wenig aufwandt.
Ausgangspunkt
Als Ausgangspunkt nehmen wir die Solution vom letzten Blogpost. Das Stylecop File liegt bereits ausserhalb der Projekte.
Hinweis: Um ein "Default-Stylecop” File zu erzeugen einfach Stylecop installieren und Rechtsklick auf ein Projekt und "Run Stylecop” klicken. Dann wird im Projektverzeichnis ein Settings.Stylecop File erzeugt.
Die StyleCop Datei verlinken
Über Rechtsklick auf das Projekt und StyleCop Settings kann man eine StyleCop Datei auch verlinken:
Dort im zweiten Reiter kann man unser Settings.Stylecop verlinken:
Wenn man das gemacht hat, wird ein File im Projektverzeichnis abgelegt, allerdings wird es nicht im Projekt referenziert, also über "Show All Files” gehen und das File ins Projekt mit reinholen:
Inhaltlich steht das in dem File:
<StyleCopSettings Version="4.3"> <GlobalSettings> <StringProperty Name="LinkedSettingsFile">..\Settings.StyleCop</StringProperty> <StringProperty Name="MergeSettingsFiles">Linked</StringProperty> </GlobalSettings> </StyleCopSettings>
Recht einleuchtend.
Das ganze in allen Projekten wiederholen...
Und nun, damit beim Bauen auch der StyleCop anspringt: Projekt Dateien bearbeiten
Damit bei jedem Bauvorgang auch der Code gecheckt wird, muss das Projektfile bearbeitet werden. Das Stylecop Target muss noch eingefügt werden.
Wenn man, wie in meiner Beispielanwendung, alle Stylecop Daten aus dem Installationsverzeichnis mit in die Solution holt, funktioniert es bei allen Projektmitgliedern, egal ob sie Stylecop installiert haben oder nicht.
Die StyleCop Targets Datei finden sie (wenn Sie bei der Installation die MSBuild Files nicht abgewählt habe) hier:
C:\Program Files (x86)\MSBuild\Microsoft\StyleCop\v4.4
Den gesamten Ordner hab ich mit in das Solution Verzeichnis kopiert.
Nun das csproj File anpassen:
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> ... <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="..\Lib\Microsoft.StyleCop.targets"/> ... </Project>
Die zweite Import Anweisung ist für das aktivieren von Stylecop zuständig. Die Position ist auch nicht ganz unwichtig. Als ich die Importanweisung in die erste Zeile geschrieben hatte, war kein Ergebnis zusehen.
Nach dem Import des Target Files in allen Projekten ist man fertig.
Diese Vorgehensweise stammt aus dem StyleCop Teamblog:
Wenn man die Stylecop Verletzungen als Error anstatt als Warning ausgeben möchte, dann kann man dies ebenfalls im csproj File einstellen. Dazu muss bei der jeweiligen Build Konfiguration dieser Parameter mit angegeben werden:
<StyleCopTreatErrorsAsWarnings>false</StyleCopTreatErrorsAsWarnings>
Fazit
Die EInbindung von Stylecop kann durchaus Sinn machen. Je nach Anforderung und Projekt muss man aber schauen welche Regeln wirklich sinnvoll sind oder nicht. Die Regeln kann man durch ein zentrales StyleCop File einfacher verwalten und nach dem initialen aufsetzen der Projekte/Solution macht es sich auch bezahlt, weil man bei jedem Build daran erinnert wird - egal ob von MSBuild oder über Visual Studio.