Réponses:
Les événements avant et après construction s'exécutent en tant que script de commandes. Vous pouvez faire une déclaration conditionnelle sur $(ConfigurationName)
.
Par exemple
if $(ConfigurationName) == Debug xcopy something somewhere
Pour info, 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".
)
"$(ConfigurationName)"
(notez les guillemets) si vous obtenez le code d'erreur 255
$(ConfigurationName)
est vide (ligne de commande d'événement post-build). if "$(Configuration)" == "Debug"
travaillé pour moi. BTW, si vous voulez faire quelque chose dans toutes les autres configurations, utilisez if NOT "$(Configuration)" == "Debug"
.
Ajoutez votre événement post-build comme d'habitude. Enregistrez ensuite votre projet, ouvrez-le dans le Bloc-notes (ou votre éditeur préféré) et ajoutez une condition au groupe de propriétés PostBuildEvent. Voici un exemple:
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<PostBuildEvent>start gpedit</PostBuildEvent>
</PropertyGroup>
cd "$(ProjectDir)"
étendu à cd ""
.
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="$(ConfigurationName) == Debug"> <Exec Command="your command"/></Target>
. Les variables de macro et tout fonctionnent normalement.
Sinon (étant donné que les événements sont placés dans un fichier de commandes, puis appelés), utilisez ce qui suit (dans la zone d'événements 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 le gérer avec les macros plutôt que d'avoir à les passer dans un fichier batch, rappelez-vous que %1
c'est $(OutputPath)
, etc.
Error 1 The command "C:\MyProject\postbuild.bat" exited with code 99. MyProject
if
et utilisergoto :$(ConfigurationName)
Visual Studio 2015: La syntaxe correcte est (gardez-la sur une seule ligne):
if "$(ConfigurationName)"=="My Debug CFG" ( xcopy "$(TargetDir)test1.tmp" "$(TargetDir)test.xml" /y) else ( xcopy "$(TargetDir)test2.tmp" "$(TargetDir)test.xml" /y)
Pas d'erreur 255 ici.
Depuis Visual Studio 2019, le .csproj
format moderne prend en charge l'ajout d'une condition directement sur l' Target
élément:
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Debug'">
<Exec Command="nswag run nswag.json" />
</Target>
L'interface utilisateur ne fournit pas un moyen de configurer cela, mais elle semble laisser l' Configuration
attribut en place en toute sécurité si vous apportez des modifications via l'interface utilisateur.
Vous pouvez transmettre le nom de la configuration au script post-génération et l'archiver pour voir s'il doit s'exécuter.
Passez le nom de la configuration avec $(ConfigurationName)
.
La vérification est basée sur la façon dont vous implémentez l'étape post-construction - ce sera un argument de ligne de commande.
Cela fonctionne pour moi dans Visual Studio 2015.
Je copie tous les fichiers DLL d'un dossier situé dans un dossier de bibliothèque au même niveau que mon dossier de solution dans le répertoire cible du projet en cours de construction.
Utiliser un chemin relatif depuis mon répertoire de projet et remonter la structure des dossiers en deux étapes avec .. \ .. \ lib
MySolutionFolder
.... MyProject
Lib
if $(ConfigurationName) == Debug (
xcopy /Y "$(ProjectDir)..\..\lib\*.dll" "$(TargetDir)"
) ELSE (echo "Not Debug mode, no file copy from lib")
Comme tout paramètre de projet, les événements de génération peuvent être configurés par configuration. Sélectionnez simplement la configuration que vous souhaitez modifier dans la liste déroulante de la boîte de dialogue Pages de propriétés et modifiez l'étape de post-génération.
Dans Visual Studio 2012, vous devez utiliser (je pense que dans Visual Studio 2010 aussi)
if $(Configuration) == Debug xcopy
$(ConfigurationName)
a été répertorié en tant que macro, mais il n'a pas été attribué.
Comparer: macros pour les commandes et les propriétés de génération