So ändern Sie die Ausführlichkeit der MSBuild-Aufgabe?
Ich würde gern eine unterschiedliche Ausführlichkeit der msbuild-Projekt aufgerufen, von der Kommandozeile, und diejenigen, die aufgerufen wird, durch die MSBuild-Aufgabe innerhalb des Projekts. Zum Beispiel:
In meinem.proj:
<Target Name=Foo>
<MSBuild Projects="a.csproj;b.csproj;c.csproj"/>
</Target>
Auf der Kommandozeile:
msbuild /v:d my.proj
nun, wenn die MSBuild-task erstellt die .csproj-Dateien, es tut mit detaillierten Ausführlichkeit als gut. Allerdings würde ich es bauen wollen-mit minimalen Ausführlichkeit.
Ich weiß, es ist möglich, zum aufrufen von msbuild manuell und zwar so:
<Target Name=Foo>
<Exec Command="msbuild /v:m a.csproj"/>
<Exec Command="msbuild /v:m b.csproj"/>
<Exec Command="msbuild /v:m c.csproj"/>
</Target>
oder in der Praxis
<Target Name=Foo>
<Exec Command="msbuild /v:m %(Projectlist.Identity)"/>
</Target>
und das funktioniert gut, natürlich, aber dann kann ich nicht die Funktionen der BuildInParallel
Schalter mehr (ich glaube nicht, dass es möglich ist, zum aufrufen von msbuild von der Befehlszeile mit mehreren Projekten, ohne die in einer Lösung?)
Update
Ging ich mit Ludwo die option: im Grunde erstellen Sie eine benutzerdefinierte logger hält zwei ConsoleLoggers als Mitglied. Hat man die Ausführlichkeit übergeben Befehlszeile an, die andere ist "minimal". Der logger registriert sich für alle Ereignisse ab und übergibt Sie an einen der Holzfäller, je nachdem, ob eine csproj-Datei ist derzeit gebaut wird oder nicht. Die Ausgabe sieht genau so aus wie normal, außer dass es keine Tausende von Zeilen aus der csproj-Dateien.
- Dieser post von Scott Hanselman könnte enlightn Sie. hanselman.com/blog/...
- + interessant zu Lesen. Aber meine Projekte sind nicht enthalten Lösungen, so dass die
/m
Schalter hat nicht die gleiche Wirkung wie effektiv Bau-Projekte in parallelen: Sie sind immer noch gebaut sequentiell (ich werde aktualisieren, die Frage, um dies zu reflektieren) - Auf einem unserer Projekte, die wir verwendet MSBuild-Sidekick zur Abbildung heraus, wie man unser Produkt-Hierarchie, könnte einen Blick Wert sein, zu helfen, auf die parrallisation der Aufgaben als gut. attrice.info/msbuild Scheint seltsam, dass Ausführlichkeit ist gekoppelt an Parallelität.
- es ist nicht wirklich gepaart, es ist nur eine Nebenwirkung, die mir versuchen zu bekommen, um die Ausführlichkeit der MSBuild-Aufgabe durch aufrufen von msbuild manuell
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie zwei Möglichkeiten (mindestens) 🙂
Erstellen Sie eine zusätzliche msbuild-Skript für den Bau abc-Projekte
"BuildABC.proj"
In Ihrem übergeordneten MSBuild-Skript ausführen mit Exec-Aufgabe und Anruf
"BuildABC.proj" mit minimalen Ausführlichkeit
Müssen Sie explizit alle übergeordneten Eigenschaften, die in der BuildABC Projekt zu msbuild-parameter /p.
Verwenden Sie benutzerdefinierte logger. Sehen Sie dieses, wie es zu tun. In diesem Fall können Sie verwenden Sie Ihre original-Skript:
In Ihre benutzerdefinierte logger nicht alles loggen, was im Zusammenhang z.B. "ein.csproj" - Projekt zwischen ProjectStarted und ProjectFinished Veranstaltungen, bei denen e.Projektfiles == "ein.csproj" (deaktivieren Sie die Diagnoseprotokollierung auf "ein.csproj" - Projekt, beim Bau der übergeordneten Projekts mit Diagnose-Ausführlichkeit)
<Exec Command="msbuild /v:m /m:2 /t:BuildSomething parent.proj"/>
; dies funktioniert auch, hat aber einen major Nachteil: alle Eigenschaften von der übergeordneten build-Skript nicht in die andere weitergegeben, es sei denn, ausdrücklich. Das wird ein major PITA, wenn es eine Menge von Eigenschaften, plus jedes mal, wenn einer Hinzugefügt wird, müssen Sie hinzufügen, wird in zwei stellen.