Risposte:
Gli eventi pre e post build vengono eseguiti come script batch. Puoi fare una dichiarazione condizionale su $(ConfigurationName)
.
Per esempio
if $(ConfigurationName) == Debug xcopy something somewhere
Cordiali saluti, non è necessario utilizzare goto. Il comando shell IF può essere utilizzato con parentesi tonde:
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)"
(nota le virgolette) se ricevi il codice di errore 255
$(ConfigurationName)
è vuoto (riga di comando dell'evento post-build). if "$(Configuration)" == "Debug"
ha funzionato per me. A proposito, se vuoi fare qualcosa in tutte le altre configurazioni, usa if NOT "$(Configuration)" == "Debug"
.
Aggiungi il tuo evento post build come al solito. Quindi salva il tuo progetto, aprilo nel Blocco note (o nel tuo editor preferito) e aggiungi la condizione al gruppo di proprietà PostBuildEvent. Ecco un esempio:
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<PostBuildEvent>start gpedit</PostBuildEvent>
</PropertyGroup>
cd "$(ProjectDir)"
ampliato a cd ""
.
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="$(ConfigurationName) == Debug"> <Exec Command="your command"/></Target>
. Le variabili macro e tutto funzionano normalmente.
In alternativa (poiché gli eventi vengono inseriti in un file batch e quindi chiamati), utilizzare quanto segue (nella casella dell'evento Build, non in un file batch):
if $(ConfigurationName) == Debug goto :debug
:release
signtool.exe ....
xcopy ...
goto :exit
:debug
' Debug items in here
:exit
In questo modo puoi avere eventi per qualsiasi configurazione, e comunque gestirli con le macro invece di doverli passare in un file batch, ricorda che %1
è $(OutputPath)
, ecc.
Error 1 The command "C:\MyProject\postbuild.bat" exited with code 99. MyProject
if
e usaregoto :$(ConfigurationName)
Visual Studio 2015: la sintassi corretta è (tenerlo su una riga):
if "$(ConfigurationName)"=="My Debug CFG" ( xcopy "$(TargetDir)test1.tmp" "$(TargetDir)test.xml" /y) else ( xcopy "$(TargetDir)test2.tmp" "$(TargetDir)test.xml" /y)
Nessun errore 255 qui.
A partire da Visual Studio 2019, il .csproj
formato moderno supporta l'aggiunta di una condizione direttamente Target
sull'elemento:
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Debug'">
<Exec Command="nswag run nswag.json" />
</Target>
L'interfaccia utente non fornisce un modo per configurarlo, ma sembra lasciare l' Configuration
attributo in sicurezza se si apportano modifiche tramite l'interfaccia utente.
Puoi passare il nome della configurazione allo script post-build e controllarlo lì per vedere se dovrebbe essere eseguito.
Passare il nome della configurazione con $(ConfigurationName)
.
Il controllo si basa su come si sta implementando il passaggio post-build: sarà un argomento della riga di comando.
Questo funziona per me in Visual Studio 2015.
Copio tutti i file DLL da una cartella situata in una cartella della libreria allo stesso livello della cartella della mia soluzione nella directory target del progetto in fase di creazione.
Utilizzando un percorso relativo dalla directory del mio progetto e salendo la struttura delle cartelle in due passaggi con .. \ .. \ lib
MySolutionFolder
.... MyProject
Lib
if $(ConfigurationName) == Debug (
xcopy /Y "$(ProjectDir)..\..\lib\*.dll" "$(TargetDir)"
) ELSE (echo "Not Debug mode, no file copy from lib")
Come qualsiasi impostazione di progetto, i buildevent possono essere configurati per Configurazione. Basta selezionare la configurazione che si desidera modificare nel menu a discesa della finestra di dialogo Pagine delle proprietà e modificare il passaggio di creazione post.
In Visual Studio 2012 devi usare (penso anche in Visual Studio 2010)
if $(Configuration) == Debug xcopy
$(ConfigurationName)
è stato elencato come macro, ma non è stato assegnato.
Confronta: macro per comandi e proprietà di costruzione