Wir verwenden TeamCity für die kontinuierliche Integration und erstellen unsere Releases über die Lösungsdatei (.sln). Ich habe in der Vergangenheit Makefiles für verschiedene Systeme verwendet, aber nie msbuild (was ich gehört habe, ist ein bisschen wie Makefiles + XML-Mashup). Ich habe viele Posts darüber gesehen, wie man msbuild direkt anstelle der Lösungsdateien verwendet, aber ich sehe keine sehr klare Antwort, warum das so ist.
Warum sollten wir uns also die Mühe machen, von Lösungsdateien zu einem MSBuild-Makefile zu migrieren? Wir haben ein paar Releases, die sich durch #define (featurized builds) unterscheiden, aber größtenteils funktioniert alles.
Die größere Sorge ist, dass wir jetzt zwei Systeme warten müssen , wenn wir Projekte / Quellcode hinzufügen.
AKTUALISIEREN:
Können die Leute den Lebenszyklus und das Zusammenspiel der folgenden drei Komponenten beleuchten?
- Die .sln-Datei von Visual Studio
- Die vielen .csproj-Dateien auf Projektebene (von denen ich ein "untergeordnetes" msbuild-Skript verstehe)
- Das benutzerdefinierte msbuild-Skript
Ist es sicher zu sagen, dass .sln und .csproj wie gewohnt in der IDE-GUI von Visual Studio verwendet / verwaltet werden, während das benutzerdefinierte msbuild-Skript handgeschrieben ist und normalerweise das bereits vorhandene individuelle .csproj "wie es ist" verwendet? So kann ich sehen, dass Überlappungen / Duplikate bei der Wartung reduziert werden ...
Ich würde es begrüßen, wenn ich etwas Licht auf die Betriebserfahrung anderer Leute werfen könnte
quelle
So, why should we bother migrating from solution files to an MSBuild 'makefile'?
Zuerst musst du dir sagen, warum du überhaupt darüber nachdenkst? Reicht die Lösungsdatei nicht aus?Because it's reputed to be better practice
woher?Antworten:
Der erste Fakt ist, dass die Lösungsdatei beim Ausführen von MSBuild auf magische Weise zu einer MSBuild-Datei wird - was passiert, wenn Sie die Lösung in Visual Studio erstellen. Außerdem handelt es sich bei all diesen Projektdateien nur um MSBuild-Dateien, die von Visual Studio verwaltet werden. Tatsächlich erledigen die Projektdateien die meiste echte Dirty-Arbeit, egal ob Sie aus Lösungen oder einem benutzerdefinierten msbuild-Skript erstellen.
Wir verwenden TeamCity auch zum Erstellen und Veröffentlichen von Anwendungen. In der Regel erhalten wir für die meisten Projekte benutzerdefinierte msbuild-Skripte. Die Rolle dieser Skripte - was mit einer Lösungsdatei nicht ganz einfach ist - besteht darin, das Projekt für die Bereitstellung oder Verteilung zu packen. In der Regel behandeln diese Skripte einige betriebliche Aspekte von Dingen - wie das Erstellen des Webprojekts in einem bestimmten Ordner oder das Kopieren in den laufenden Konfigurationen im Gegensatz zu den Entwicklungskonfigurationen. Das schwere Heben wird in der Regel in den Projektdateien selbst behandelt - das Build-Skript verweist nur auf diese, wir versuchen nicht, dieses Rad neu zu erstellen. Insgesamt funktioniert es großartig und es ist nicht wirklich viel duplizierter Code.
quelle
Das Makefile für msbuild ist die .sln-Datei (oder die vcproj-Datei).
Eine typische msbuild-Befehlszeile würde ungefähr so aussehen:
Mit msbuild können Sie den Erstellungsprozess skripten und automatisieren. Unabhängig davon, ob Sie es bemerkt haben oder nicht, TeamCity hat msbuild die ganze Zeit verwendet.
quelle
Lassen Sie mich diese Frage beantworten.
Obwohl Sie Ihre .SLN-Datei mit Sicherheit einfach als "Build-Prozess" verwenden können, handelt es sich bei der Datei selbst nicht um einen Build-Prozess. Die Lösungsdatei ist eigentlich nur ein Teil von Visual Studio und wird für die Entwicklung verwendet. Visual Studio ist jedoch nur ein Teil des Build- und Release-Prozesses. Sie können sich bei der Verwaltung Ihres Builds nicht auf Solutions verlassen, und Solutions bieten mit Sicherheit keine skalierbare Build-Situation.
Der gesamte Zweck des Einrichtens eines Erstellungsprozesses besteht darin, zuverlässige Erstellungen zu erstellen. Das heißt, der Build-Prozess ist so zuverlässig, dass Sie unabhängig von der Build-Konfiguration eine vorhersehbare Build-Ausgabe erhalten. Jedes Mal, jede Maschine. Das Ergebnis einer vorhersehbaren und zuverlässigen Erstellung ist, dass der Test-, Bereitstellungs- und Veröffentlichungsprozess in hohem Maße automatisiert werden kann, wodurch das Risiko menschlicher Fehler weiter verringert wird.
Das Einrichten eines Erstellungsprozesses erfordert eine Investition, aber in bestimmten Fällen ist die Investition erforderlich. Hier sind einige Faktoren, die einen msbuild-Prozess begünstigen:
Lassen Sie mich ein Beispiel geben, um meinen letzten Punkt zu erläutern. Mein aktuelles Unternehmen entwickelt SharePoint. Für die SharePoint-Entwicklung muss mindestens SharePoint Foundation installiert sein, um Builds für SharePoint-Projekte ausführen zu können. Da es sich um einen kompakten Build-Server handelt, ist es völlig unpraktisch, auf dem Build-Server SharePoint zu installieren. SharePoint ist nicht nur eine Bestie mit hohen Anforderungen, sondern es würde auch schwerwiegende Auswirkungen auf die Leistung eines Builds haben - und Builds sollten so schnell und schlank wie möglich sein. Durch die Nutzung von MSBuild kann ich diese Installationsanforderung auf dem Buildserver beseitigen. Für unseren Build-Server gelten keine anderen Installationsanforderungen als .NET Framework (von MSBuild benötigt) und Node.
Als Referenz würde ich empfehlen, dieses Buch von Sayed Ibrahim Hashimi zu lesen: http://www.amazon.com/Inside-Microsoft-Build-Engine-Foundation/dp/0735645248/ref=sr_1_fkmr0_1?ie=UTF8&qid=1412014650&sr= 8-1-fkmr0 & keywords = msbuild + zuverlässig + build
quelle
Das ist genau die Frage, die ich mir vor ein paar Monaten gestellt habe! Wir hatten alles gut vorbereitet:
Und wenn es um die Reproduzierbarkeit ging, stellte sich heraus, dass diese schlecht abschnitt. Wenn Sie TeamCity als Build-Skript verwenden, ist es schwierig, ähnliche Ergebnisse zuverlässig auf Ihrem eigenen Entwicklungscomputer zu reproduzieren.
Wenn Sie ein Erstellungsskript haben, kennt das Erstellungsskript alles, was getan werden muss, und verfügt über alle Variablen. Wenn Sie einen CI-Server als Erstellungsskript verwenden und ein Problem auftritt, z. B. ein komplexer Test, der fehlschlägt oder ein Bereitstellungspaket manuell erstellt werden muss (gemäß meinem Beispiel), müssen Sie alle Schritte der Erstellung manuell zusammenfassen.
Also, kurz gesagt , warum ein (MS) Build-Skript? Weil Sie am Ende mehr Anforderungen haben, wenn es um Ihren Build geht. Sie möchten wahrscheinlich einige Tests durchführen und daraus einige Artefakte generieren. Sie möchten wahrscheinlich Bereitstellungen durchführen. Und wenn alles, was Sie wollen, ausführbar sein muss, sei es auf einem Build-Server oder Ihrem Computer, kann es nur in einem Build-Skript enden.
quelle