Wie kann ich meine Postbuild-Ereignisse auf die Ausführung nur für einen Build-Typ beschränken? Ich benutze die Ereignisse, um DLLs in ein lokales IIS= virtuelles Verzeichnis zu kopieren, aber ich möchte nicht, dass dies auf dem Build-Server im Release-Modus geschieht.
Pre- und Post-Build-Ereignisse werden als Batch-Skript ausgeführt. Sie können eine bedingte Anweisung für $(ConfigurationName)
ausführen.
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 Postbuild-Ereignis wie gewohnt hinzu. Speichern Sie dann Ihr Projekt, öffnen Sie es in Notepad (oder Ihrem bevorzugten Editor) und fügen Sie der PostBuildEvent-Eigenschaftsgruppe eine Bedingung hinzu. Hier ist ein Beispiel:
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<PostBuildEvent>start gpedit</PostBuildEvent>
</PropertyGroup>
alternativ (da die Ereignisse in eine Batch-Datei geschrieben und dann aufgerufen werden), verwenden Sie Folgendes. (im Feld Ereignis erstellen, nicht in einer Batchdatei):
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 übergeben zu müssen. Beachten Sie, dass% 1 $ (OutputPath) usw. ist:
Visual Studio 2015: Die korrekte Syntax lautet (lassen Sie es 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 einchecken, um festzustellen, ob es ausgeführt werden soll.
Übergeben Sie den Konfigurationsnamen mit $ (ConfigurationName)
Die Überprüfung basiert auf der Implementierung des Post-Build-Schritts. Dies ist ein Befehlszeilenargument