3

J'essaie d'exécuter un fichier de commandes post-construction sur une version .NET qui crypte un fichier de sortie, supprime l'original et renomme la version cryptée au nom de fichier de sortie d'origine. à savoir:Existe-t-il un moyen de supprimer un fichier de sortie dans un événement post-construction?

Construire A, puis en post-construction:

  1. Crypter A> B,
  2. DEL/FA,
  3. RENAME B A.

je peux » Il semble que le fichier de sortie original soit supprimé après le cryptage, car il semble qu'il y ait un verrouillage de fichier par le projet d'installation (ou peut-être le projet lui-même?) dessus. J'ai essayé de forcer la suppression, mais ce n'est pas seulement un attribut en lecture seule, mais un verrou complet. Y a-t-il un moyen de contourner cela?

Répondre

2

Ceci est un problème de studio visuel. Il fuit généralement les verrous de fichiers partout. Vous pouvez envisager d'exécuter les générations en dehors de Studio en utilisant directement MSBuild.

0

Le fichier de sortie est-il une DLL ou simplement du contenu? Le référentiel de projet Visual Studio vise à verrouiller la sortie principale (DLL, EXE dans certains cas) d'un projet d'assemblage. Assurez-vous de savoir quel processus maintient votre handle d'ouverture de fichier, peut-être en exécutant SysInternals Handle Utility juste avant votre tentative de changement de nom. Si c'est devenv.exe qui contient le fichier, je ne suis pas sûr de ce que vous pouvez faire à ce sujet, sauf pour que votre installateur tienne le fichier renommé plutôt que le fichier de sortie.

+0

Le fichier de sortie est un fichier .dll. –

2

poste Je sais, mais au cas où quelqu'un débarque ici ....

Il n'y a pas de message d'erreur donné par l'OP nous ne savons donc pas sûr qu'il ne parvient pas à cause d'un verrou de fichier.

Je l'ai vu à plusieurs reprises dans les scripts avant et après la construction que les fichiers sont référencés tout simplement comme:

del $(ProjectDir)UnwantedFile.txt 

Cela peut fonctionner pendant longtemps avant de tomber à plat sur son visage lorsque le projet est déplacé un emplacement différent car la commande del n'aime pas les espaces dans le chemin.

Wrap l'appel guillemets doubles et il fonctionnera tout le temps:

del "$(ProjectDir)UnwantedFile.txt" 

Chaque fois que vous utilisez une variable de chemin, vous devez envelopper tout le chemin entre guillemets que vous ne savez pas que l'avenir, des espaces peuvent être introduits dans votre chemin.

Pour ce poste, la meilleure version serait:

Encrypt "$(A)"->"$(B)" 
del /F "$(A)" 
rename "$(B)" "$(A)" 
Questions connexes