3 Stimmen

Warum Build Fails mit CruiseControl.NET aber es baut gut manuell mit den gleichen Einstellungen?

Ich habe ein Projekt, das gut erstellt, wenn ich es manuell erstellen, aber es schlägt mit CC.NET.

Der Fehler, der bei CC.NET angezeigt wird, hängt im Wesentlichen mit einem fehlgeschlagenen Import zusammen, weil die Datei nicht gefunden wurde; eines der Projekte (C++ dll) versucht, eine von einem anderen Projekt erstellte dll zu importieren. Dll sollte an der richtigen Stelle sein, da es eine Abhängigkeit zwischen den Projekten gibt - indeeed, wenn ich manuell bauen alles funktioniert gut (Beachten Sie, dass, wenn ich sage manuell ich alles frisch aus Quellcode-Repository dann einen Rebuild von VS2005 aufrufen, um CC.NET-Automatisierung zu simulieren).

sieht so aus, als ob Abhängigkeiten ignoriert werden, wenn der Build durch CC.NET automatisiert wird.

Ich baue im Modus Release MinDependency.

Für jede Hilfe wären wir dankbar!

0voto

Pedro Punkte 11731

Ich bin auf Fälle gestoßen, in denen meine Lösung kompiliert wird, wenn ich sie in der IDE öffne und kompiliere, aber fehlschlägt, wenn ich sie von der Kommandozeile aus ausführe (entweder msbuild oder devenv). In jedem Fall lag das Problem an einem fehlerhaften Verweis - wahrscheinlich, weil die Pfade zwischen Ihrer lokalen Box und dem Build-Server nicht übereinstimmen. Sie sehen, dass es in der IDE korrekt kompiliert, weil VisualStudio beim Öffnen einer Projektmappe versucht, fehlerhafte Pfade automatisch aufzulösen. Wenn dies geschieht, werden Sie nicht darüber informiert und Ihre Projektmappe und Projektdateien werden in der Regel nicht geändert (was Sie ja auch hoffen.)

Versuchen Sie, Ihre Projektmappen- und/oder Projektdateien in einem Texteditor zu öffnen, und stellen Sie sicher, dass alle relativen Pfade gültig sind.

0voto

Wie Alex schon sagte, denke ich, dass Ihr Problem darin besteht, dass der CC.NET-Dienst unter einem lokalen Benutzerkonto läuft. Leider sind einige der C++-Umgebungsvariablen benutzerspezifisch und werden nicht auf die Standard-Build-Umgebung übertragen. In meinem Fall waren es die lib- und include-Dateien, die in Werkzeuge -> Optionen -> Projekte und Lösungen -> VC++-Verzeichnisse . Das gleiche Problem verursacht offensichtlich auch andere Probleme und wird in dieser Artikel als gelber Block.

Meine Lösung bestand darin, einen neuen Benutzer zu erstellen ( BuildUser ) auf der Build-Maschine speziell für den Bau. Der Schlüssel war, sich dann als BuildUser und richten Sie die Umgebung ein. Schließlich änderte ich den CC.NET-Dienst so, dass er sich als BuildUser und startete ihn neu.

0voto

Fox Punkte 1968

(ich poste erneut, da mein erster Beitrag anscheinend fehlgeschlagen ist)

VC2003 scheint eine Inkonsistenz zwischen Abhängigkeiten und Eingabebibliotheken zu haben.

Ein Beispiel:

  • ProjektA --> A.lib
  • ProjektB --> B.exe
    • In Eigenschaften-->Verknüpfung-->Zusätzliche Eingabebibliotheken ist A.lib angegeben.
    • In den Projektabhängigkeiten ist ProjectA nicht markiert (warum dies nicht automatisch geschieht, ist mir immer noch ein Rätsel).

Beim Bereinigen von ProjectB wird A.lib nicht gelöscht und auch nicht neu erstellt, wenn ProjectB kompiliert wird. Der Build scheint also auf Ihrem lokalen Rechner erfolgreich zu sein.

CC.NET beginnt von vorne, und der Build schlägt fehl, da A.lib nicht gefunden wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X