web-dev-qa-db-fra.com

Comment exécuter des événements post-génération Visual Studio pour la construction de débogage uniquement

Comment puis-je limiter mes événements post-build à une exécution pour un seul type de build? J'utilise les événements pour copier des DLL dans un répertoire virtuel local IIS, mais je ne souhaite pas que cela se produise sur le serveur de génération en mode de publication.

565
JC.

Les événements avant et après la construction sont exécutés en tant que script batch. Vous pouvez faire une instruction conditionnelle sur $(ConfigurationName).

Par exemple

if $(ConfigurationName) == Debug xcopy something somewhere
708
Joseph Daigle

Pour votre information, vous n'avez pas besoin d'utiliser goto. la commande Shell IF peut être utilisée avec des crochets ronds:

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

Ajoutez votre événement post-build comme d'habitude. Enregistrez ensuite votre projet, ouvrez-le dans le Bloc-notes (ou votre éditeur favori) et ajoutez une condition au groupe de propriétés PostBuildEvent. Voici un exemple:

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

alternativement (puisque les événements sont placés dans un fichier batch puis appelés), utilisez ce qui suit. (dans la zone Événement de génération, pas dans un fichier de commandes):

if $(ConfigurationName) == Debug goto :debug

:release
signtool.exe ....
xcopy ...

goto :exit

:debug
' debug items in here

:exit

De cette façon, vous pouvez avoir des événements pour n'importe quelle configuration, et toujours les gérer avec les macros plutôt que de les transférer dans un fichier de commandes et de vous rappeler que% 1 correspond à $ (OutputPath), etc.:

104
CestLaGalere

Visual studio 2015: La syntaxe correcte est (gardez-la sur une ligne):

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

Aucune erreur 255 ici.

12
Eric Bole-Feysot

Vous pouvez passer le nom de la configuration au script post-build et le vérifier pour voir s'il doit être exécuté.

Transmettez le nom de la configuration avec $ (ConfigurationName)

Le vérifier dépend de la manière dont vous implémentez l'étape de post-génération - ce sera un argument de ligne de commande.

4
Lou Franco