Wie Ausführen von Visual Studio-Post-Build-Ereignissen nur für Debug-Erstellung

Wie kann ich meine Post-Build-Ereignisse so beschränken, dass sie nur für einen Buildtyp ausgeführt werden? Ich verwende die Ereignisse, um DLLs in ein lokales virtuelles IIS-Verzeichnis zu kopieren, aber ich möchte nicht, dass dies auf dem Build-Server im Freigabemodus geschieht.

Pre- und Post-Build-Ereignisse werden als Stapelscript ausgeführt. Sie können eine bedingte statement für $(ConfigurationName) .

Zum Beispiel

 if $(ConfigurationName) == Debug xcopy something somewhere 

Zu Ihrer Information, Sie müssen goto nicht verwenden. Der Shell-IF-Befehl kann mit runden Klammern verwendet werden:

 if $(ConfigurationName) == Debug ( copy "$(TargetDir)myapp.dll" "c:\delivery\bin" /y copy "$(TargetDir)myapp.dll.config" "c:\delivery\bin" /y ) ELSE ( echo "why, Microsoft, why". ) 

Fügen Sie Ihr Postbuildereignis wie üblich hinzu. Speichern Sie dann das Projekt, öffnen Sie es im Editor (oder Ihrem bevorzugten Editor) und fügen Sie der PostBuildEvent-Eigenschaftsgruppe eine Bedingung hinzu. Hier ist ein Beispiel:

  start gpedit  

Alternativ (da die Ereignisse in eine Batch-Datei eingefügt und dann aufgerufen werden), verwenden Sie Folgendes. (im Feld Build-Ereignis, nicht in einer Batch-Datei):

 if $(ConfigurationName) == Debug goto :debug :release signtool.exe .... xcopy ... goto :exit :debug ' debug items in here :exit 

Auf diese Weise können Sie Ereignisse für jede Konfiguration haben und sie trotzdem mit den Makros verwalten, anstatt sie in eine Batch-Datei zu übergeben. Beachten Sie, dass% 1 $ (OutputPath) usw. ist:

Visual Studio 2015: Die korrekte Syntax ist (in einer Zeile):

 if "$(ConfigurationName)"=="My Debug CFG" ( xcopy "$(TargetDir)test1.tmp" "$(TargetDir)test.xml" /y) else ( xcopy "$(TargetDir)test2.tmp" "$(TargetDir)test.xml" /y) 

Kein Fehler 255 hier.

Sie können den Konfigurationsnamen an das Post-Build-Skript übergeben und dort nachsehen, ob es ausgeführt werden soll.

Übergeben Sie den Konfigurationsnamen mit $ (ConfigurationName)

Die Überprüfung basiert darauf, wie Sie den Post-Build-Schritt implementieren – es wird ein Befehlszeilenargument sein

Das funktioniert für mich in Visual Studio 2015.
Ich kopiere alle DLL-Dateien aus einem Ordner in einem lib-Ordner auf der gleichen Ebene wie mein Lösungsordner in das Zielverzeichnis des zu erstellenden Projekts.
Verwenden Sie einen relativen Pfad von meinem Projektverzeichnis und gehen Sie die Ordnerstruktur zwei Schritte mit .. \ .. \ lib

MySolutionFolder
….Mein Projekt
Lib

 if $(ConfigurationName) == Debug ( xcopy /Y "$(ProjectDir)..\..\lib\*.dll" "$(TargetDir)" ) ELSE (echo "Not Debug mode, no file copy from lib") 

Wie bei jeder Projekteinstellung können die buildevents pro Konfiguration konfiguriert werden. Wählen Sie einfach die Konfiguration, die Sie ändern möchten, im Dropdown-Menü des Eigenschaftsseiten-Dialogfelds aus, und bearbeiten Sie den Post-Build-Schritt

In VS 2012 musst du verwenden (ich denke auch in VS 2010)

 if $(Configuration) == Debug xcopy 

$ (ConfigurationName) wurde als Makro aufgelistet, aber nicht zugewiesen.

Bildbeschreibung hier eingeben

Vergleichen Sie: http://msdn.microsoft.com/en-us/library/c02as0cs(v=vs.110).aspx