In den letzten Tagen habe ich begonnen mich mit Code Contracts zu beschäftigen um mein Projekt “Schlüsselverwaltungen” zu verbessern bzw. sicherer zu machen. Nach kleineren Startschwierigkeiten bin ich grundsätzlich begeistert von den Möglichkeiten, aber wie immer: “Wo Licht ist, ist auch Schatten…” –).
Das aktuelle Projekt umfasst 34 “Unterprojekte” in Visual Studio 2008 und ist dementsprechend aufwändig zu kompilieren. Um eine Art “Automated development” zu ermöglichen, habe ich mir eine Reihe von Batch-Dateien geschrieben die ein Erstellen des gesamten Projekts “auf Knopfdruck” zu ermöglichen.
Durch die Einbindung von Code Contracts hat sich die Zeit zum Kompilieren des Projekts um ein Vielfaches erhöht. Dies ist sowohl in Visual Studio direkt als auch bei msbuild zu spüren. Nun hatte ich bei den Eigenschaften eines Projektes unter dem Reiter Code Contracts eine Checkbox “Cache results” gefunden, die mir sehr vielversprechend erschien. Innerhalb von Visual Studio selbst ist es nun einfacher möglich das gesamte Projekt bzw. Teile zu kompilieren.
Nun habe ich heute morgen mein Skript gestartet um aktuelles Build zu erzeugen. Nach dem Start des static checkers bricht dieser mit einer Fehlermeldung ab. Der static checker konnte den SQL Server compact nicht finden und ohne diesen ist kein Kompilieren möglich. Nun muss man dazu wissen, dass ich den SQL Server compact nicht verwende, schon gar nicht im aktuellen Projekt. Demzufolge konnte auch keine Assembly verwendet worden sein, die den SQL Server compact verwendet. In der etwas cryptischen Fehlermeldung von msbuild war lediglich die Rede von einem Cache der verwendet werden sollte.
Kurzum: Nach längerem Suche im Internet kam ich über Umwege auf die Idee, dass der auf meinem Rechner fehlende SQL Server compact das Problem sein könnte. Ich habe diesen schon seit längerem deinstalliert, weil ich ihn nicht verwenden möchte und ihn auch nicht brauche. Nachdem ich diesen wieder neu installiert hatte, war auch die Fehlermeldung beim Kompilieren weg. Warum dies allerdings nicht beim Einschalten dieser Option in Visual Studio zu einem Fehler führt ist verwirrend.