Ich versuche, eine MSBuild-Datei einzurichten, die eine andere MSBuild-Datei aufruft, und ich frage mich, wie ich das am besten erreichen kann.
Wir verwenden es in dem Szenario, in dem ein Build-Server eine MSBuild-Datei herunterlädt, die dann abhängig von den Parametern die entsprechende zweite Datei ausführt.
Ich weiß, dass ich einfach die <Exec Command="msbuild.exe ..." />
Aufgabe verwenden kann, aber das scheint ein bisschen hacky zu sein.
Gibt es eine einfachere Möglichkeit, MSBuild zum Ausführen einer anderen MSBuild-Datei zu verwenden?
Sie können die MSBuild task
verwenden, um ein Ziel in einem anderen MSBuild-Projekt zu erstellen.
Sie können das Ziel auch in eine externe .targets-Datei einfügen, die von beiden MSBuild-Projekten importiert wird, und die CallTarget task
, um es zu erstellen.
Update: Um einen externen Befehl auszuführen, verwenden Sie die Exec task
.
Es ist nicht nur schöner, die <MSBuild>
Aufgabe als <Exec Command="msbuild.exe .."/>
zu verwenden. Dies bedeutet, dass der einzelne MSBuild-Prozess über alle zu erstellenden Projekte informiert ist und keine Kollisionen auftreten. Ein bestimmtes Projekt kann nicht von zwei Threads gleichzeitig erstellt werden. Das ist normalerweise wichtig, wenn Sie mit "/ m" bauen.
Es gibt noch einige andere Vorteile, wie zum Beispiel das Vorhandensein eines Loggers für den gesamten Build.
Antwort auf Adam Orens Kommentar: Hier ist ein Beispiel für die Ausführung einer externen Datei - in diesem Fall wird nunit gestartet. Das% 22 ist für das Escaping gedacht, dh "Sie können Leerzeichen in Ihrem ausführbaren Pfad haben."
%Vor%Sie müssen keine Variablen wie ich verwenden, aber ich finde, dass es Ihre Skripte portabler macht. $ (NUnit_Install_Directory) ist als
definiert %Vor%
Tags und Links msbuild