Cómo ejecutar eventos de creación posterior a Visual Studio solo para la creación de depuración

¿Cómo puedo limitar mis eventos posteriores a la comstackción a ejecutarse solo para un tipo de comstackción? Estoy usando los eventos para copiar archivos DLL a un directorio virtual local de IIS, pero no quiero que esto suceda en el servidor de comstackción en modo de lanzamiento.

Los eventos previos y posteriores a la comstackción se ejecutan como un script por lotes. Puede hacer una statement condicional en $(ConfigurationName) .

Por ejemplo

 if $(ConfigurationName) == Debug xcopy something somewhere 

FYI, no necesitas usar goto. el comando IF del shell se puede usar con corchetes redondos:

 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". ) 

Agregue su evento de comstackción de publicaciones como normal. Luego, guarde su proyecto, ábralo en el Bloc de notas (o su editor favorito) y agregue condiciones al grupo de propiedades PostBuildEvent. Aquí hay un ejemplo:

  start gpedit  

alternativamente (dado que los eventos se ponen en un archivo por lotes y luego se llaman), use lo siguiente. (en el cuadro de evento Generar, no en un archivo por lotes):

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

De esta forma puede tener eventos para cualquier configuración y aún así administrarlos con las macros en lugar de tener que pasarlos a un archivo por lotes y recordar que% 1 es $ (OutputPath), etc.

Visual Studio 2015: la syntax correcta es (mantenerlo en una línea):

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

No hay error 255 aquí.

Puede pasar el nombre de la configuración al script posterior a la creación y verificarlo allí para ver si debería ejecutarse.

Pase el nombre de la configuración con $ (ConfigurationName)

Verificarlo se basa en cómo está implementando el paso posterior a la comstackción: será un argumento de línea de comando

Esto funciona para mí en Visual Studio 2015.
Copio todos los archivos dll de una carpeta ubicada en una carpeta de lib en el mismo nivel que mi carpeta de solución en el directorio de destino del proyecto que se está creando.
Usando una ruta relativa desde mi directorio de proyecto y subiendo por la estructura de la carpeta dos pasos con .. \ .. \ lib

MySolutionFolder
….Mi proyecto
Lib

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

Al igual que cualquier configuración de proyecto, los eventos de construcción se pueden configurar por Configuración, simplemente seleccione la configuración que desea cambiar en el menú desplegable del cuadro de diálogo Páginas de propiedades y edite el paso de creación posterior

En VS 2012 debes usar (creo que también en VS 2010)

 if $(Configuration) == Debug xcopy 

$ (ConfigurationName) se listó como una macro, pero no se asignó.

enter image description here

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

Intereting Posts