Frage

Ok, ich gebe leicht zu, dass ich ein Neuling bin, wenn es um kontinuierliche Integration geht.

Davon abgesehen versuche ich, eine CC.NET -Umgebung einzurichten, um mich selbst zu erziehen, aber ich habe Probleme, die Informationen zu finden, die ich benötigt, um den automatisierten Build -Teil einzurichten.

Wie ich verstehe, in C# die von VS 2005 und Forward erzeugte .csproj -Datei ist Eine gültige MSBuild -Datei. Um die MSBuild -Aufgabe mit der Datei .csproj in CC.NET in CC.NET zu integrieren, habe ich jedoch ein paar Probleme damit:

  1. Hier ist viel los, das ich nicht sicher bin, ob ich in einer automatisierten Build -Umgebung wirklich brauche.
  2. Ich habe diese Datei nicht erstellt. Ich verstehe es nicht und das macht mir Angst. (Programmierung durch Zufall)
  3. Das meiste, was los ist, scheint abstrahiert zu werden $(MSBuildToolsPath)\Microsoft.CSharp.targets
  4. Als Ergebnis von 1, 2 und 3 scheint die Änderung der Datei so etwas wie Mbunit verwickelt und schwieriger zu sein, als sie sein muss. Meine einzige wirkliche Option ist es, es in die aufzunehmen AfterBuild Abschnitt, der mir ein bisschen wie ein Hack erscheint.

Also ein paar Fragen an die CC.NET -Leute, die MSBuild -Leute und die Mbunit -Leute.

  1. Ist es bei der Verwendung von MSBuild ratsam, die VS-generierte .csproj-Datei als Build-Datei zu verwenden? Oder sollte ich meine eigene erstellen?
  2. Sollten Mbunit -Tests Teil der MSBuild -Datei oder der CC.NET -Datei sein? Meine Forschung scheint darauf hinzudeuten, dass sie in die MSBUILD -Datei gehören. Wenn dies der Fall ist, erstelle ich eine neue MSBuild .Proj -Datei und überprüfe dies zusätzlich zur .csproj -Datei in CVS? Oder wird die Mbunit -Aufgabe Teil meiner .csproj -Datei?
  3. Ähnlich wie bei Frage 2. Wenn ich die Mbunit -Tests zur MSBUILD -Datei hinzufüge und am Ende die .csproj -Datei verwenden, ist die Datei. Target Name="AfterBuild" Wirklich der Abschnitt zum Hinzufügen dieser Informationen? Sollte es nicht geben Target Name="Test" Sektion? Die Verwendung der generierten VS -.CSProj -Datei scheint die zweite Option zu verhindern.

Ich weiß, dass es dort viel gibt, aber das meiste, was ich online finden konnte Es ist überhaupt eine Kurve, es ist eine Schrittfunktion. :)

Bearbeiten 1: Ich habe den Text so aktualisiert, dass ich etwas prägnanter ist, und um einige anhaltende Fragen zu beantworten, die ich mit den Antworten hatte.

War es hilfreich?

Lösung

Ich würde empfehlen, die generierten .csproj -Dateien zu verwenden - tatsächlich für die Produktion ist es eine gute Idee, die generierten .sln -Dateien zu verwenden. Ich habe festgestellt, dass Sie gewinnen, indem Sie dieselben Lösungsdateien wie die Entwickler verwenden.

Beachten Sie, dass .SLN -Dateien nicht gültige MSBuild -Projektdateien sind - sie werden von MSBuild selbst in MSBUILD -Projekte umgewandelt, wenn sie als Eingaben verwendet werden. Schwierig!

Für Lernzwecke möchten Sie möglicherweise den Aufbau eines .csproj protokollieren und sich durchsetzen, um eine Vorstellung davon zu bekommen, was los ist. MSBUILD ist jedoch etwas deklarativer als Nant. Nehmen Sie sich also Zeit und experimentieren Sie ein wenig.

Schließlich würde ich Ihre .SLN- oder .csproj -Dateien in ein kontinuierliches Build -Skriptprojekt mit MSBuild -Aufgaben einwickeln, um Ihre Projekte zu erstellen und Ihre Unit -Tests zusammenzuführen. Auf diese Weise müssen die Entwickler den Unit -Test nicht jedes Mal ausführen, wenn sie erstellen - aber jedes Mal, wenn sie ihren Code integrieren, werden die Unit -Tests durchgeführt. Und ja, stellen Sie sicher, dass sie schnell laufen! Was mehr als eine Sekunde dauert, sollte stattdessen während eines geplanten (nächtlichen?) Builds ausgeführt werden. Wahrscheinlich sind es weniger Einheitstests und mehr Integrationstests, die mit einem Unit -Test -Framework geschrieben wurden, wenn sie mehr als eine Sekunde dauern.

Bearbeiten: Einige Additionsinformationen, die ich als nützlich empfunden habe - mit MSBuild 3.5 können Sie die Zielausgabe von einer .ln -Datei abrufen, während diese Informationen nicht in MSBUILD 2.0 zurückgegeben werden (obwohl ich denke beide Versionen). Sie können die Ausgabe (Ihre erstellten Dateien) als Eingänge in Ihr Rahmen für das Testen von Unit -Tests verwenden.

Andere Tipps

Lassen Sie die CSPROJ -Datei gut in Ruhe (wie Sie sagen, Sie verstehen sie nicht).

Erstellen Sie Ihre eigene MSBuild -Proj -Datei und rufen Sie den CSProj (oder SLN) über die MSBuild -Aufgabe aus Ihrer Hauptaufbaudatei aus. Sagen Sie Ihrem CI -Server, dass Sie Ihre Build -Datei erstellen sollen.

Diese Separate erleichtert das Hinzufügen Ihrer eigenen Vor- und Postaufgaben (Unit -Tests, SQL -Skripte, FXCOP/andere statische Analysen usw.). Sie werden Ihre Arbeitsumgebung nicht brechen. Dies bedeutet auch, dass Sie Ihre benutzerdefinierten Ziele in dem, was Sie wünschen (MSBuild/Ant usw.), als Msbuildcontrib auf Codeplex für zusätzliche Güte aussehen können.

Sie benötigen keinen Visual Stuido auf Ihrem Build -Server (Unles haben Sie Bereitstellungsprojekte, es sei denn, dies wurde auch geändert, seit ich das letzte Mal nachgesehen habe).

Erstellen Sie Ihre eigene Projektdatei (alles, was mit *proj endet, wird von MSBuild als Projektdatei angesehen) und rufen Sie Ihren Build von dort an. So was:

<MSBuild Projects="MySolution.sln" Targets="Clean; Rebuild" Properties="Configuration=$(BuildMode);">

Beachten Sie, dass MSBuild auch ohne Änderungen .sln (Lösungsdatei) erstellen kann, was normalerweise einfacher ist als eine Reihe von CSPROJ -Dateien ...

Ich benutze sowohl Nant als auch MSBuild. Nant wurde mit verbessert mit Nantcontrib so dass ich bekam MSBUILD Taks. Ich mag vorübergehend eingerichtet sein, aber bisher habe ich keine größeren Probleme gelaufen. Das heißt, ich erstelle auch keine neue CSPROJ -Datei, da ich dieselbe CSPROJ/SLN verwende, die ich in VS2008 verwende. Bauprojekte mit MSBUILD stark vereinfacht, ältere Nant -Skripte (wir haben verwendet CSC Aufgabe).

Anmerkungen:

  1. Wenn Sie die Windows Workflow Foundation in Ihren Projekten verwenden, haben Sie große Schwierigkeiten, ein solches Projekt ohne MSBuild zu erstellen.
  2. Installieren Sie nicht vs.NET auf Ihrem Build -Computer. Sie können verwenden Wix Erstellen Sie eine Installation MSI.
  3. @Franci Penov: Ausführungseinheitstests sollten Teil jedes Builds sein. Möchten Sie wirklich bis morgen warten, um einen Fehler zu finden? Es gibt eine Randnotiz: Unit -Tests sollten sehr schnell laufen.

Ich persönlich denke, es ist in Ordnung, mit der .csproj -Datei zu gehen. Es ist nicht so viel los, dass Sie sich nicht hinzufügen müssten, wenn Sie Ihr eigenes MSBuild -Projekt rollen.

Welche Route Sie jedoch entscheiden, ich entscheiden mich dennoch, ich würde immer noch empfehlen, das Mbunit nicht als Teil Ihres Build -Schritts hinzuzufügen, sondern als separate Schritt in CC.NET hinzuzufügen. Laufen Unit -Tests sollten Teil des täglichen CI -Zyklus sein. Es sollte jedoch nicht Teil jedes Builds sein.

Ok, ein paar Dinge, auf die man achten muss. Das CSPROJ -Format hat sich von VS2005 auf VS2008 geändert. Wenn Sie mit MSBuild gehen, denken Sie daran, dass Sie nicht in der Lage sind, .VDProj (Setup) -Dateien zu erstellen. Dafür brauchen Sie Devenv (die VS -ausführbaren Datei). Das heißt, Sie können jederzeit eine MSBuild -Aufgabe erstellen, die Devenv nennt und für Sie erstellt.

In Bezug auf Ihre Frage, ob Sie Ihre eigene CSPROJ -Datei erstellen oder die von VS2005 erstellte Verwendung verwenden, würde ich eine mittlere Straße vorschlagen: Erstellen Sie Ihre eigene Projektvorlage, was Ihren Bedürfnissen gerecht wird und sich um den Rest kümmern lassen.

Es ist in Ordnung, .csproj als Eingabe für MSBuild zu verwenden. Sie können auf CSProj manuell Aufgaben für sie hinzufügen, die während des Kompletts von Vs. Aber wenn Sie einige nicht triviale Sachen machen, ist es besser, separate MSBuild -Skripte zu erstellen. Und sie können aus CSProj -Dateien verwiesen werden. Haben Sie sich MS Build Server angesehen, der Teil von TFS ist? Es integriert sich in die SourceControl von TFS und könnte für CI verwendet werden. Die Projektdateien sind MSBuild -Skripte.

Wenn ich Nant verwendet habe, muss dann VS auf dem Server installiert werden? Meinten Sie 'MSBuild'? Nein, es ist nicht unbedingt, VS für die Verwendung von MSBuild mit CSProj -Dateien zu installieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top