[c#] Visual Studio "Impossible de copier" ... lors de la génération



Answers

Dans Visual Studio Premium 2013 (mise à jour 3), j'ai résolu cela avec un pré-build un doublure:

(if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb)

Cela supprime avec élégance tous les anciens fichiers PDB (si c'est possible), puis renomme tout ce qui reste avec une extension .old.pdb . Un bon effet secondaire est que si l'ancien PDB est toujours verrouillé, il ajoute simplement une autre pièce .old au nom de fichier, et ils seront tous nettoyés la prochaine fois que vous redémarrerez Visual Studio et que vous ferez une build.

Par exemple, build / debug session 1 laisse MyProject.pdb verrouillé.
La prochaine fois que vous construisez:
MyProject.pdb -> MyProject.old.pdb

Ensuite, build / debug session 2 est démarré, et MyProject.pdb et MyProject.old.pdb sont toujours verrouillés:
MyProject.old.pdb -> MyProject.old.old.pdb
MyProject.pdb -> MyProject.old.pdb

Enfin, redémarrer Visual Studio et faire une nouvelle construction va se débarrasser de ces deux, et continuer le processus comme d'habitude.

Question

Je continue d'obtenir cette erreur lors de la construction de mon projet VS2012 C #

Error   41  Could not copy "obj\Debug\WeinGartner.WeinCad.exe" to
 "bin\Debug\WeinGartner.WeinCad.exe". 
 Exceeded retry count of 10. Failed.    


Error   42  Unable to copy file "obj\Debug\WeinGartner.WeinCad.exe" to
"bin\Debug\WeinGartner.WeinCad.exe". The process cannot access the file
'bin\Debug\WeinGartner.WeinCad.exe' because it is being used by another 
process.    

Maintenant, j'ai compris que tuer le processus

Weingartner.WeinCad.vhost.exe

travaille (parfois) mais cela m'énerve. Un moyen d'empêcher cela de se produire?

Mes paramètres de débogueur sont




La réponse de Geoff ( https://.com/a/25251766/3739540 ) est bonne, mais elle renvoie le code d'erreur 1 lors de la recompilation.

Voici ce qui a fonctionné pour moi (2> nul 1> nul à la fin + sortie 0):

(if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb) 2>nul 1>nul
(if exist "$(TargetDir)*old.dll" del "$(TargetDir)*old.dll") & (if exist "$(TargetDir)*.dll" ren "$(TargetDir)*.dll" *.old.dll) 2>nul 1>nul
exit 0



Je ne peux pas donner une solution pour empêcher cela, mais vous pouvez au moins RENOMMER le fichier verrouillé (Windows Explorer, ou fenêtre de commande classique), puis compiler / construire. Pas besoin de redémarrer ou de redémarrer VS201x. Avec un peu d'expérience, vous pouvez ajouter un script de pré-construction pour supprimer les anciens fichiers ou renommer puis hors de la voie au cas où il y aurait un verrou.




Citation:

Une solution de contournement consiste à placer cela dans la propriété de ligne de commande de l'événement Pre-build du projet> (dans l'onglet Événements de génération):

Extrait de code

if exist "$(TargetPath).locked" del "$(TargetPath).locked"

if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"



Ma contribution de 10 cents.

J'ai toujours ce problème parfois sur VS 2015 Update 2.

J'ai trouvé que le changement de cible de compilation résout le problème.

Essayez ceci: si vous êtes dans DEBUG, passez à RELEASE et build, puis revenez à DEBUG. Le problème est parti.

Stefano




Dans mon cas c'était le runner de Resharper Unit Tests (plus les tests NUnit, jamais eu un tel problème avec MsTests). Après avoir tué le processus, a pu reconstruire le processus, sans redémarrer OS ou VS2013




le .vhost.exe est un processus de débogage, il semble donc que le processus en cours de débogage n'a pas fermé correctement. Il y a des chances que vous ayez un bogue qui le maintient en vie et n'arrête pas le processus de débogage correctement - il y a des options à détacher du processus lorsque vous cliquez sur 'arrêter le débogage' au lieu de tuer le débogueur.

Mais c'est le problème - le fichier que vous essayez de copier est verrouillé (c'est-à-dire encore utilisé) par le système d'exploitation, empêchant ainsi la copie. Assurez-vous que ce fichier est gratuit et que vous pourrez le copier.




Je l'ai résolu en supprimant IISExpress dans le gestionnaire de tâches




Ajouter dans l'événement de pré-construction de votre projet maître taskkill / f / fi "pid gt 0" / im "YourProcess.vshost.exe"




Tuer le (s) processus (s) vstest.executionengine.exe résout ce problème 90% du temps pour moi. Si cela ne fonctionne pas, alors tuer QTAgent32.exe et ensuite supprimer les dossiers / bin et / obj pour le projet en question fonctionne.

C'est la partie la plus irritante de ma journée de travail. :)




Je pense que je l'ai résolu en supprimant la coche pour Break all processes when one process breaks dans les options de débogage (première capture d'écran de l'op-> deuxième option).
Ça a bien fonctionné pendant un certain temps depuis que je l'ai décoché.
J'utilise les commandes MySql NET Connector et DevExpress dans mon projet. Peut-être que l'un d'entre eux ne disposait pas de connexions, de liaisons, etc. à cause de ce drapeau qui était activé.

EDITED: certainement ça marche! Plus de 'Impossible de copier le fichier' et plus d'erreurs du Concepteur de Formulaire.




Je reçois cela chaque fois que je déploie si je modifie une page Xaml sur WP8 en utilisant VS2012.

Je dois soit ne pas ouvrir une page Xaml ou utiliser l'explorateur de processus pour tuer le processus XDesProc.exe.

Si vous obtenez cette erreur, je recommande d'utiliser l'explorateur de processus pour voir ce qui se passe (même si c'est un problème différent). Il suffit de trouver le processus "WeinGartner.WeinCad.exe" et il devrait montrer le processus et gérer l'accès au fichier (enfin au moins quand le fichier vhost ne corrige pas le problème).




J'ai enfin comment le réparer. Pourquoi nous ne pouvons pas continuer le débogage après le premier débogage parce que le premier exe de débogage fonctionne toujours. Donc, après le premier débogage, vous devez aller dans le Gestionnaire des tâches -> onglet Processus -> [votre nom de projet exe] terminer le processus exe.

ça marche pour moi :)




Assurez-vous que vous fermez toutes les instances wcfSvcHost et réessayez. Cela a fonctionné pour moi!




Exception

Dans certains cas dans Visual Studio lorsque vous (Build || Reconstruire) en plus de l' exécution de IISExpress vous avez rencontré cette exception:

Impossible de copier le fichier "obj \ Debug \ YourProjectName.dll" dans bin \ YourProjectName.dll ". Le processus ne peut pas accéder au fichier 'bin \ YourProjectName.dll' car il est utilisé par un autre processus

Solution

  1. Faites un clic droit sur le projet web qui doit être construit.
  2. Cliquez sur propriétés.
  3. Sélectionnez l'onglet Construire les événements sur le côté gauche.
  4. Dans la ligne de commande des événements de pré-construction, collez ces deux lignes:
tasklist /fi "imagename eq iisexpress.exe" |find ":" > nul
if errorlevel 1 taskkill /f /im "iisexpress.exe"

Vous êtes bon 2 GO!




Related