VS 2010: Projekt muss nur als Auslöser für MSBUILD-Skript dienen und nicht zur Assembly kompiliert werden

8

Ich habe eine Lösung mit mehreren Web-Anwendungsprojekten darin. Nachdem alle Projekte erstellt wurden, muss ich ein MSBUILD-Skript ausführen.

Bisher habe ich das Skript aus einem der vorhandenen Projekte aufgerufen (über <Target Name="AfterBuild"> in der .csproj-Datei). Allerdings musste ich sicherstellen, dass ich das Projekt verwendet habe, das zuletzt erstellt wurde, und wenn sich die Build-Reihenfolge jemals änderte, würde ich unerwartete Ergebnisse erhalten.

Also habe ich beschlossen, ein leeres Webanwendungsprojekt zu erstellen und die Projektabhängigkeiten so festzulegen, dass es immer als letztes erstellt wird, und dann das MSBUILD-Skript an dieses anhängen.

So läuft es jetzt immer zur richtigen Zeit, aber ich bekomme eine extra (kleine) Baugruppe als Ergebnis des angeblich leeren Projekts, das gebaut wird. Es gibt keine Code-Dateien im Projekt (außer AssemblyInfo.cs), aber eine Assembly wird immer erstellt.

Gibt es also entweder eine Möglichkeit, die zu erstellende Assembly zu stoppen, oder eine Möglichkeit, das MSBUILD-Skript als Ganzes an die Lösung anzuhängen und dieses Dummy-Projekt zu vermeiden?

    
Laurence 08.12.2011, 13:42
quelle

2 Antworten

9

In MSBuild 4.0 gibt es zwei neue Hooks, mit denen Skripts vor und nach dem Erstellen einer Lösung ausgeführt werden können. Wenn MSBuild für eine Lösungsdatei ausgeführt wird, wird nach zwei Zieldateien im Lösungsverzeichnis gesucht:

  • vor . Lösungsname .sln.targets
  • nach . Lösungsname .sln.targets

Wenn eine dieser Dateien gefunden wird, wird sie automatisch in der richtigen Phase ausgeführt.

Wenn in Ihrem Fall ein Skript ausgeführt wird, nachdem alle Projekte in der Lösung erstellt wurden, können Sie eine after.MySolution.sln.targets -Datei mit einem Ziel wie:

%Vor%

Siehe auch:

Enrico Campidoglio 08.12.2011, 14:03
quelle
3

Ich habe nicht genügend Reputationspunkte, um die akzeptierte Antwort von Enrico zu kommentieren, daher möchte ich hier nur kommentieren, dass dies nicht funktioniert, wenn Sie den Build in Visual Studio 2010 selbst ausführen. Es funktioniert, wenn MSBuild als Befehlszeile ausgeführt wird.

    
ariscris 07.03.2012 17:34
quelle