Ich habe eine große Lösung, die aus 50+ Klassenbibliotheken und ~ 10 SharePoint WSP-Projekten besteht. Ich versuche, die Build-Zeiten zu optimieren, da es standardmäßig 5+ Minuten auf einer anständigen Server-Hardware dauert.Erstellen Sie eine Lösung mit Zielen, die nur in einer Teilmenge von Projekten in der Lösung vorhanden sind.
Derzeit arbeitet der Build-Prozess wie dieser (Pseudo-Code):
MSBuild.exe MySolution.sln /T:Clean
MSBuild.exe MySolution.sln /T:Build
foreach (Project.csproj in *.csproj where is WSP project)
{
MSBuild.exe Project.csproj /T:CleanPackage
MSBuild.exe Project.csproj /T:Package
}
Was ich will, erreichen, ist dies alles zu tun, um einen einzelnen MSBuild.exe
Aufruf verwenden, so dass der Erstellungsprozess parallelisiert werden kann und Verarbeitung duplizieren wird vermieden, wenn die WSP-Projekte verpackt werden.
ich dies leicht für einen einzigen WSP Projekt tun können:
MSBuild.exe Project.csproj /T:Clean;CleanPackage;Build;Package
Wenn jedoch muss ich das gleiche für die ganze Lösung:
MSBuild.exe MySolution.sln /T:Clean;CleanPackage;Build;Package
MSBuild fehlschlägt und meldet Fehler, sobald es findet ein Projekt in der Lösungsdatei, die das CleanPackage
Ziel nicht enthält:
D: \ MySolution \ Clas s.Library.Project \ Class.Library.Project.csproj: Fehler MSB4057: Das Ziel "CleanPackage" existiert nicht im Projekt.
Also, die Frage ist, wie dieses Problem zu überwinden und einen Single-Kommandozeilen-Build-Aufruf ohne a) macht manuelle Änderungen an alle csproj
Dateien (Wartung Alptraum), b) Schreiben Sie einen benutzerdefinierter komplizierte Build-Skript erreichen ? Ich dachte daran, eine Master-Build-Datei zu definieren, die eine einzige benutzerdefinierte enthalten würde. Ich bin mir jedoch nicht sicher, wie ich die richtigen Abhängigkeiten zu Projekten in der Lösungsdatei ausdrücken kann, ohne alle einzelnen Projekte in zwei Gruppen (Klassenbibliotheken, WSP-Projekte) manuell aufzulisten.
Hinweis: Während meine Frage an this one ähnlich ist, habe ich beschlossen, sie zu öffnen und zu halten, selbst beantworten, um die Leistungsergebnisse zu decken.
Beginnen Sie mit der Beschleunigung des Build (etwas), indem Sie das Rebuild-Ziel aufrufen, anstatt msbuild zweimal mit Clean/Build aufzurufen, das Endergebnis ist das gleiche. Für den anderen Teil: sollte ein ziemlich einfaches MSbuild-Master-Skript sein, aber müssen die Projekte mit dem Paket-Ziel in einer bestimmten Reihenfolge aufgerufen werden? Sind sie abhängig vom Package-Ziel oder nur vom Build-Ziel? – stijn
@stijn (1) 'Rebuild': kleines Detail, nicht genau das Problem, das ich löse, und etwas, das ich bereits losgeworden bin. (2) Nein, sie sind nicht voneinander abhängig. Ein SharePoint WSP-Paket ist das Endprodukt - etwas, das eine 'exe'-Zeile darstellt. Jede von ihnen hängt jedoch von mehreren Klassenbibliotheksprojekten in der Lösung ab. –
@stijn Mit anderen Worten, was ich brauche mit Hilfe ist das "ziemlich einfache MSbuild-Master-Skript", als dies ein Werkzeug, das ich nicht das Bedürfnis hatte, viel unter die Haube zu gehen. –