J'essaie de nettoyer le dossier de publication à l'aide de l'événement Post Build afin que je supprime les fichiers .xml
et .pdb
et que je tente de copier tous les fichiers dll dans un dossier de bibliothèque personnalisé avec un bogue Post Build Exited with Code 1
Mon code:
if $(ConfigurationName) == Release del "$(TargetDir)*.xml", "$(TargetDir)*.pdb"
if $(ConfigurationName) == Release xcopy "$(TargetDir)\*.dll" "$(TargetDir)\lib\"
Les 2 commandes sont séparées par une nouvelle ligne comme indiqué ... Le dossier Lib existe également.
Au lieu de
xcopy $(TargetDir)*.dll $(TargetDir)lib\
tu devrais utiliser
xcopy "$(TargetDir)*.dll" "$(TargetDir)lib\"
pour gérer les espaces dans le chemin.
Essayez d'ouvrir VS avec Exécuter en tant qu'administrateur -> Ouvrir le projet -> Construire.
Commencez par utiliser $(TargetDir)\
, car certaines variables renvoient sans barre oblique finale, ce qui concaténerait votre chemin afin que vous recherchiez bin\Debuglib\
au lieu de bin\Debug\lib
.
Comme l'a souligné @Uwe Keim, Le code de retour 1 signifie qu'aucun fichier ne peut être copié . Cela peut également arriver si vous pointez sur un dossier non valide, ce qui renforce l'idée que vous pourriez avoir besoin de ce \
.
Il est également possible que la commande del
ait échoué, bien que le même article technique de del n'indique aucun code de retour. Certaines sources de forum indiquent qu'un code de retour de 1 peut indiquer l'échec d'une suppression.
Cette modification a fonctionné pour moi:
del *.XML, *.pdb
xcopy /y "$(TargetDir)*.dll" "$(TargetDir)lib\"
1). Omettre la variable du répertoire cible dans la commande del
2) Option/y dans xcopy Note de la page d’aide de Microsoft:/y: Supprime l’invite à confirmer que vous souhaitez remplacer un fichier de destination existant.
Si vous utilisez un chemin relatif dans la commande Copier, assurez-vous que le répertoire parent fait référence au répertoire approprié que vous souhaitez, sinon vous obtiendrez une erreur du code de sortie 1.
Pour ex:
copy "C:\SolnFolder\project1\release\bin\xyz.dll" "..\MainProject\bin\x86\"
Ici, Project1 et MainProject coexistent chez SolnFolder. Quand j'ai pensé à copier xyz.dll dans le dossier x86 de MainProject, cela a échoué car ..\used dans la commande de copie fait référence au dossier de publication du chemin source au lieu de SolnFolder. Par conséquent, le problème ci-dessous a résolu le problème:
copy "C:\SolnFolder\project1\release\bin\xyz.dll" "..\..\..\MainProject\bin\x86\"
Remarque: également, assurez-vous que les guillemets sont utilisés avec chaque chemin relatif
Cette solution a fonctionné pour moi
xcopy "$(TargetDir)*.dll" "$(TargetDir)lib\"