Ich möchte die Befehlszeile zum Erstellen eines bestimmten Projekts einer Lösung mit msbuild, wie wir es mit devenv.com tun. In devenv.com können wir ein Projekt einer Lösung über die folgende Befehlszeile angeben
devenv.com /Build Release|x86 test.sln /project "testproject"
Mit der obigen Befehlszeile kann ich das Testprojekt in der Datei test.sln mit devenv.com erstellen. Wie lautet die Befehlszeile für msbuild für dieselbe Lösung?
Vielen Dank
Antworten:
Beachten Sie, dass
/t
der Projektname in der Lösung zugewiesen ist und sich vom Namen der Projektdatei unterscheiden kann.Auch, wie in angegeben Build - spezifischen Zielen in Lösungen von MSBuild.exe mit: Wie :
Sie können auch mehrere Projekte gleichzeitig erstellen:
Zum Wiederherstellen oder Reinigen wechseln Sie
/t:project
zu/t:project:clean
oder/t:project:rebuild
quelle
/t
Parameter für jedes zu erstellende Projekt zu wiederholen :msbuild test.sln /t:project /t:project2
/t:SlnFolder\My_Project_name
.MSBuild arbeitet tatsächlich durch die Verwendung von Projekten, nicht durch die Lösung. Die Lösung wird nur verwendet, um sie intern in eine temporäre Projektdatei in MSBuild zu analysieren. Sie sollten in der Lage sein, das gewünschte Projekt direkt über MSBuild zu erstellen, indem Sie den folgenden Befehl ausführen.
Ich weiß, dass es ein großes Problem gibt, bei dem Sie das Projekt direkt anstelle der Lösung verwenden könnten: Wenn Sie die Lösung verwenden, um Abhängigkeiten zwischen den Projekten auszudrücken, anstatt die Verweise auf das Projekt hinzuzufügen und das Build-System die Abhängigkeiten automatisch berechnen zu lassen .
Wenn Sie eine Erstellungsreihenfolge mithilfe der sln-Datei erzwingen, empfehle ich, diese Abhängigkeiten direkt in die proj-Dateien zu integrieren und sie aus der sln zu entfernen. Auf diese Weise können Sie jede Projektdatei direkt von MSBuild aus aufrufen, und die Projekte werden alle ohne zusätzliche Arbeit unabhängig voneinander erstellt. Sie sollten die sln-Datei wirklich als eine Gruppe von Projekten behandeln, um die Arbeit in Visual Studio zu vereinfachen, und nicht als Build-Eingabe.
quelle
Posting als Information für zukünftige Suchende
Fügen Sie dem Build-Skript Folgendes hinzu und führen Sie es einmal aus. Dadurch werden die genauen Ziele und andere Informationen generiert, die msbuild tatsächlich verwendet.
Beispiel: Wenn Sie
.
im Projektnamen oder in den Ordnern msbuild_
anstelle von erwartet.
.Nachdem Sie die Informationen erhalten haben, aktualisieren Sie das Build-Skript mit den erforderlichen Details.
quelle
Um dies zu tun, müssen Sie wissen , was die Projektziel-Name ist, nicht unbedingt der Projektname.
Eine Möglichkeit, dies herauszufinden, besteht darin, MSBuild für Ihre SLN mit den beabsichtigten Parametern zu verwenden, nachdem Sie eine spezielle Umgebungsvariable festgelegt haben, die
MSBuildEmitSolution
auf den Wert von aufgerufen wird1
.Ich musste dies kürzlich aufgrund eines sehr spezifischen Namens für ein Ziel in verschachtelten Verzeichnissen tun. Aus meiner generierten Datei habe
my_stuff.sln.metaproj
ich folgende Zeile gefunden:<Target Name="Utils\Firewall\FirewallUtils:Rebuild">
Das heißt, die zu verwendende Befehlszeile lautet:
quelle
.csproj
in meinem Fall). Ich <3 SO!Um zusätzliche Informationen hinzuzufügen, wird beim Ausführen von msbuild im Projektordner standardmäßig die Projektdatei erstellt, da sie die einzige dort ist.
Es gibt viele Variationen der Verwendung von msbuild auf diese Weise. Sie können die proj-Datei direkt angeben.
Überprüfen Sie die msbuild-Dokumentation auf Verwendung, Anforderungen an die Projektdatei sowie die Vorteile des Erstellens des Projekts anstelle der Lösung.
MS MSBuild-Dokumentation
Es gibt Vorteile, auf diese Weise zu bauen, wie oben von Mark-Smith erwähnt.
quelle