Pregunta 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 compilación a ejecutarse solo para un tipo de compilació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 compilación en modo de lanzamiento.


522
2017-09-29 18:41


origen


Respuestas:


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

Por ejemplo

if $(ConfigurationName) == Debug xcopy something somewhere

649
2017-09-29 18:48



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

455
2017-08-23 13:06



Agregue su evento de compilació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:

<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <PostBuildEvent>start gpedit</PostBuildEvent>
</PropertyGroup>

111
2017-09-29 18:47



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.


100
2017-07-24 09:56



Visual Studio 2015: la sintaxis 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í.


12
2018-02-22 13:21



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 compilación: será un argumento de línea de comando


4
2017-09-29 18:44



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

-1
2018-06-29 14:59



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


-2
2017-09-29 18:48