Ich habe zwei Projekte in meiner VS-Lösung, BookApp.Web
und BookApp.Domain
.
BookApp.Web
referenzen BookApp.Domain
.
BookApp.Web
hat die folgenden Buildkonfigurationen: debug
, staging
, prod-eu
, prod-us
und prod-as
. Wir haben drei Rechenzentren für die Produktion und eine Staging-Umgebung.
BookApp.Domain
hat bisher nur zwei Buildkonfigurationen, debug
.
Wenn ich die Lösung in Visual Studio erstelle, kann ich den Build-Konfigurator verwenden, um sicherzustellen, dass egal, welche Build-Konfiguration für das Web-Projekt ausgewählt ist, die Debug-Konfiguration immer für das Domain-Projekt verwendet wird.
Beim Erstellen mit MSBuild auf meinem Continuous Integration Server gehen jedoch Dinge schief. Ich verwende dies in meiner rollout.msbuild-Datei:
%Vor%Wenn ich das ausführe, erwartet MSBuild, dass alle abhängigen Projekte dieselbe Erstellungskonfiguration haben. Da dies nicht der Fall ist (und nicht IMO sein sollte), schlägt es mit dieser Fehlermeldung fehl:
%Vor%Eine Antwort auf eine verwandte Frage schlägt vor, separat zu erstellen .sln-Lösungen für jede Buildkonfiguration und die Ausführung mit MSBuild. Das klingt für mich nicht nach einer guten Idee.
Das Kopieren aller Buildkonfigurationen auf das Domänenprojekt ist ebenfalls nicht ideal.
Gibt es eine bessere Möglichkeit, MSBuild mitzuteilen, verschiedene Buildkonfigurationen zu verwenden?
Sehen Sie sich diese Antwort an. Sie erklärt, wie die Konfigurationen von Project an Project über den MSBuild-Task und die MetaData der Konfiguration übergeben werden, um die gewünschte Konfiguration für das Zielprojekt zu übergeben.
AKTUALISIEREN
Ich habe eine Lösung mit einer Klassenbibliothek (Sample.Domain) und ConsoleApplication (SampleApp.Console) erstellt. Ich habe zwei weitere Konfigurationen zur SamplApp.Console hinzugefügt: prod-us; prod-eu, Sample.Domain blieb mit debug; release.
Ich habe dann die csproj-Datei der ConsoleApplication wie folgt geändert:
ProjectReferences
%Vor%Es wurde ein Schalter für die Konfiguration hinzugefügt, die an MSBuild übergeben wurde, um einige Eigenschaften für Ausgabedateien und Referenzdateien zu konfigurieren:
%Vor%Erstellte ein Ziel, um die an MSBuild übergebene Konfiguration zu wechseln, so dass Debug Debug an Sample.Domain übergibt, alles andere wird es weitergeben Release
%Vor%Das Build-Ziel verwendet die Eigenschaften, die wir hinzugefügt haben, so dass die Ausgabe und Kopie von Referenzdateien die richtigen Werte entsprechend dem Konfigurationswert
haben %Vor%So rufen Sie die Debug-Konfiguration auf msbuild SampleApp.Console.csproj
Rufen (Release; prod-us; prod-eu; ...) wird so gemacht msbuild SampleApp.Console.csproj / p: Konfiguration="prod-us" / p: Ausgabepfad="bin"
Ich bin mir sicher, dass es optimiert werden kann und vielleicht etwas einfacher ist, aber es funktioniert.
Tags und Links visual-studio msbuild