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