Antworten:
Pre- und Post-Build-Ereignisse werden als Batch-Skript ausgeführt. Sie können eine bedingte Anweisung für ausführen $(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".
)
"$(ConfigurationName)"
(beachten Sie die Anführungszeichen), wenn Sie Fehlercode 255
$(ConfigurationName)
leer (Befehlszeile für Ereignisse nach dem Erstellen). if "$(Configuration)" == "Debug"
arbeitete für mich. Übrigens, wenn Sie in allen anderen Konfigurationen etwas tun möchten, verwenden Sie if NOT "$(Configuration)" == "Debug"
.
Fügen Sie Ihr Post-Build-Ereignis wie gewohnt hinzu. Speichern Sie dann Ihr Projekt, öffnen Sie es im Editor (oder in Ihrem bevorzugten Editor) und fügen Sie der Eigenschaftsgruppe PostBuildEvent eine Bedingung hinzu. Hier ist ein Beispiel:
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<PostBuildEvent>start gpedit</PostBuildEvent>
</PropertyGroup>
cd "$(ProjectDir)"
erweitert auf cd ""
.
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="$(ConfigurationName) == Debug"> <Exec Command="your command"/></Target>
. Makrovariablen und alles funktionieren wie gewohnt.
Verwenden Sie alternativ (da die Ereignisse in eine Batchdatei eingefügt und dann aufgerufen werden) Folgendes (im Feld Build-Ereignis, 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 diese dennoch mit den Makros verwalten, anstatt sie an eine Batchdatei übergeben zu müssen. Denken Sie daran, dass dies der Fall %1
ist $(OutputPath)
usw.
Error 1 The command "C:\MyProject\postbuild.bat" exited with code 99. MyProject
if
und verwendengoto :$(ConfigurationName)
Visual Studio 2015: Die korrekte Syntax lautet (halten Sie sie 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.
Ab Visual Studio 2019 unterstützt das moderne .csproj
Format das Hinzufügen einer Bedingung direkt zum Target
Element:
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Debug'">
<Exec Command="nswag run nswag.json" />
</Target>
Die Benutzeroberfläche bietet keine Möglichkeit, dies einzurichten, aber es scheint, dass das Configuration
Attribut sicher an Ort und Stelle bleibt, wenn Sie Änderungen über die Benutzeroberfläche vornehmen.
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 darauf, wie Sie den Post-Build-Schritt implementieren. Dies ist ein Befehlszeilenargument.
Dies funktioniert bei mir in Visual Studio 2015.
Ich kopiere alle DLL-Dateien aus einem Ordner in einem Bibliotheksordner auf derselben Ebene wie mein Lösungsordner in das Zielverzeichnis des zu erstellenden Projekts.
Verwenden eines relativen Pfads aus meinem Projektverzeichnis und Aufrufen der Ordnerstruktur in zwei Schritten mit .. \ .. \ lib
MySolutionFolder
.... MyProject
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, in der Dropdown-Liste des Dialogfelds "Eigenschaftenseiten" aus und bearbeiten Sie den Schritt nach dem Erstellen.
In Visual Studio 2012 müssen Sie verwenden (ich denke auch in Visual Studio 2010)
if $(Configuration) == Debug xcopy
$(ConfigurationName)
wurde als Makro aufgeführt, aber nicht zugewiesen.
Vergleichen Sie: Makros für Build-Befehle und -Eigenschaften