123 votes

Erreur : Impossible d'accéder au fichier bin/Debug/... car il est utilisé par un autre processus

Lorsque je débogue mon projet, j'obtiens l'erreur suivante :

"Impossible de copier le fichier "obj \Debug\My Dream.exe" à "bin \Debug\My Dream.exe". Le processus ne peut pas accéder au fichier 'bin \Debug\My Dream.exe' parce qu'il est utilisé par un autre processus".

En utilisant l'explorateur de processus, je vois que MyApplication.exe a été supprimé mais que le processus System l'utilise toujours bien que j'aie arrêté le débogage auparavant. Chaque fois que je modifie mon code et que je lance le débogage, cela se produit. Si je copie le projet sur une clé USB et que je lance le débogage, il fonctionne correctement.

Pourquoi ? Comment puis-je corriger cette erreur ?

J'utilise Window 7 Professional. Avec Xp, je n'ai jamais eu cette erreur.

129voto

Cody Gray Points 102261

Ugh, c'est un vieux problème, quelque chose qui apparaît encore dans Visual Studio de temps en temps. Il m'a mordu quelques fois et j'ai perdu des heures à redémarrer et à me battre avec VS. Je suis sûr qu'il a été discuté ici sur SO plus d'une fois. Il a également été abordé sur les forums MSDN. Il n'y a pas de solution réelle, mais il y a quelques solutions de contournement. Commencez vos recherches ici .

Ce qui se passe, c'est que VS acquiert un verrou sur un fichier et ne le libère pas. Ironiquement, ce verrou empêche VS lui-même de supprimer le fichier afin de pouvoir le recréer lorsque vous reconstruisez l'application. Le seul problème apparent La solution consiste à fermer et à redémarrer VS pour qu'il libère le verrou sur le fichier.

Ma solution originale consistait à ouvrir le dossier bin/Debug et à renommer l'exécutable. Vous ne pouvez pas supprimer s'il est verrouillé, mais vous pouvez le renommer. Vous pouvez donc ajouter un numéro à la fin ou autre chose, ce qui vous permet de continuer à travailler sans avoir à fermer toutes vos fenêtres et à attendre que VS redémarre. Certaines personnes ont même automatisé cette opération en utilisant un événement de pré-construction. pour ajouter une chaîne aléatoire à la fin de l'ancien nom de fichier de sortie. Oui, c'est un géant mais ce problème devient si frustrant et débilitant que vous êtes prêt à tout.

J'ai appris par la suite, après un peu plus d'expérimentation, que le problème ne semble apparaître que lorsque vous construisez le projet avec l'un des concepteurs ouverts. Ainsi, la solution qui a fonctionné pour moi à long terme et qui m'a empêché d'avoir à nouveau affaire à une de ces erreurs stupides est de m'assurer que je ferme toujours toutes les fenêtres des concepteurs avant de construire un projet WinForms. Oui, cela aussi est un peu gênant, mais c'est bien mieux que d'avoir à redémarrer VS deux fois par heure ou plus.

Je suppose que cela s'applique également à WPF, bien que je ne l'utilise pas et que je n'aie jamais rencontré ce problème.

Je n'ai pas non plus encore essayé de le reproduire sur VS 2012 RC. Je ne sais pas si le problème a été corrigé ou non. Mais mon expérience jusqu'à présent a été qu'il arrive toujours à apparaître même après que Microsoft ait prétendu l'avoir corrigé. Il est toujours présent dans VS 2010 SP1. Je ne dis pas que leurs programmeurs sont des idiots qui ne savent pas ce qu'ils font, bien sûr. Je pense qu'il y a simplement plusieurs causes à ce bug et/ou qu'il est très difficile à reproduire de manière fiable en laboratoire. C'est la même raison pour laquelle je n'ai pas personnellement rempli de rapport de bogue à ce sujet (bien que j'aie fait un +1 à d'autres), parce que je n'arrive pas à le reproduire de manière fiable, un peu comme l'abominable homme des neiges.

<pour en finir avec cette diatribe qui ne s'adresse à personne en particulier>

65voto

ScottN Points 469

Cette erreur m'a déjà été signalée auparavant, même dans Visual Studio 2008. Elle est revenue et plus fréquente dans Visual Studio 2012.

Voici ce que je fais.

Collez ceci dans l'événement de pré-construction du projet en question :

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

23voto

Alex Points 95

Ordinateur (clic droit) -> gérer -> Service & Application -> service -> Activer l'expérience d'application

Ça a marché pour moi !

15voto

lkisac Points 1130

J'ai eu le même problème dans Visual Studio 2013. Je ne suis pas sûr de la cause de ce problème pour mon projet, mais j'ai pu le résoudre en nettoyant la solution et en la reconstruisant.

  1. Construire > Solution propre
  2. Solution Build > Rebuild

8voto

Sibeesh Venu Points 4473

Je comprends que c'est une vieille question. Malheureusement, j'étais confronté au même problème avec mon .net core 2.0 l'application en visual studio 2017 . J'ai donc pensé à partager la solution qui a fonctionné pour moi. Avant cette solution, j'avais essayé les étapes suivantes.

  1. Redémarrage de Visual Studio
  2. Fermé toutes les applications
  3. Nettoyer ma solution et reconstruire

Aucune des étapes ci-dessus n'a permis de résoudre le problème.

Et puis j'ai ouvert mon Task Manager et sélectionné dotnet puis j'ai cliqué sur le bouton End task. Plus tard, j'ai ouvert mon Visual Studio et tout fonctionnait bien.

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X