Erreur de construction: "Le processus ne peut pas accéder au fichier car il est utilisé par un autre processus"

88

J'ai une webformsapplication C # qui jusqu'à aujourd'hui fonctionnait à merveille.

Aujourd'hui, tout d'un coup, chaque fois que j'essaye d'exécuter l'application, j'obtiens une erreur de verrouillage de fichier:

Impossible de copier le fichier "obj \ Debug \ MyProject.exe" vers "bin \ Debug \ MyProject.exe". Le processus ne peut pas accéder au fichier "bin \ Debug \ MyProject.exe" car il est utilisé par un autre processus.

Googler l'erreur ne donne rien au-delà de l'évidence, c'est-à-dire que VS pense que le fichier est verrouillé. Et c'est définitivement Visual Studio lui-même qui verrouille le fichier, car lorsque je ferme VS et que je le rouvre, le projet s'exécute correctement - la première fois. Lorsque j'essaye de l'exécuter une deuxième fois, j'obtiens l'erreur de verrouillage de fichier.

Fermer VS et rouvrir chaque fois que je veux exécuter l'application n'est pas une solution de contournement viable! Comment savoir ce qui verrouille le fichier et l'empêcher de se verrouiller?

EDIT: Une autre découverte intéressante: je n'ai même pas besoin d'exécuter l'application. Le simple fait de le compiler une fois provoque le verrouillage du fichier; Je ne peux pas compiler deux fois de suite!

Ce problème est spécifique à un projet de ma solution. Tous les autres projets fonctionnent bien et peuvent être exécutés autant de fois que je le souhaite. Ce n'est que ce seul projet qui se verrouille.

Shaul Behr
la source
pouvez-vous essayer de tuer le vshost.exe pour voir si cela aide?
rene le
@rene - il n'y a pas de processus vshost.exe. Ont-ils renommé cela dans VS 2010?
Shaul Behr le
[nom de votre application] .vshost.exe
rene
@rene - non, rien n'apparaît dans les processus actuels sous ce nom
Shaul Behr
1
@Shaul avez-vous ajouté un contrôle d'utilisateur personnalisé à votre formulaire? essayez de fermer le concepteur avant d'exécuter: stackoverflow.com/questions/2690119/…
rene

Réponses:

133

J'ai trouvé une solution simple qui fonctionne pour moi. Ça va comme ça:

Lorsque le problème survient, changez simplement la configuration du bâtiment en haut (si dans «Release» en «Debug» et vice versa), compilez puis revenez à la configuration précédente et compilez à nouveau.

capture d'écran

Je suppose que changer la configuration libère vcshost et devenv.

Yechiel BD
la source
2
Meilleure réponse, OMI. (Ah- il s'est donné le crédit.)
Jason P Sallinger
C'est une excellente solution de contournement! Bien que parfois cela cesse de fonctionner pour une raison quelconque (?).
Christopher
3
@ChrisEmerson J'ai remarqué cela aussi. Je peux passer à Release et créer et exécuter l'application, mais je ne peux même pas créer le projet après être revenu à Debug.
Zack
J'ai fini par devoir redémarrer Visual Studio pour me débarrasser de l'assemblage. J'ai essayé de réinitialiser IIS et la solution ci-dessus, mais je peux toujours voir le fichier dll dans le dossier C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL
Weihui Guo
1
Cela a fonctionné exactement une fois, puis plus jamais. Pas même après avoir redémarré VS. Peu importe combien je passe entre Release et Debug, cela échoue.
Frank H.
24

Eh bien, j'ai résolu le problème moi-même - même si je ne sais toujours pas pourquoi. J'ai décidé d'isoler le problème en supprimant tous les fichiers du projet, puis en les rajoutant et en déterminant de cette façon quel fichier était la source de mon problème. Donc, un par un, j'ai réintroduit des fichiers dans le projet, compilé et nettoyé chaque étape du processus ... jusqu'à ce que ... j'ai ajouté le dernier ...

... et tout fonctionnait toujours bien.

J'ai fait une comparaison avec le contrôle de source de mon .csproj original; pas de vraies différences. Et même lorsque j'ai essayé de revenir à la version précédente du .csproj, cela fonctionnait toujours.

Magie noire. Si cela fonctionne, il vaut parfois mieux ne pas demander pourquoi - acceptez-le et continuez ...

EDIT: Le problème est récurrent, et je crois que je l'ai isolé lorsque j'ai le concepteur de formulaire ouvert d'un formulaire abstrait / générique au moment de la compilation.

Leçon apprise: assurez-vous que le Concepteur de formulaires de tous les formulaires ou contrôles abstraits ou génériques est fermé avant la compilation! Sinon, vous devez fermer VS et rouvrir!

Shaul Behr
la source
1
C'est peut-être parce que le fichier qui rencontrait le problème n'était plus accessible par aucun processus depuis sa suppression. La suppression de tous les fichiers DEVRAIT résoudre ce problème. Bien pensé.
Jeff LaFay
2
Cela arrive toujours aux projets en ligne de commande uniquement (pas de formulaire), donc je ne suis pas sûr que vous soyez vraiment sur quoi que ce soit.
Zack
16

Ce que nous avons découvert ici, est le suivant: Dans la page de propriétés du projet, onglet Déboguer, décochez la case "Activer le processus d'hébergement de Visual Studio". Je ne sais pas à quoi sert cette propriété, mais elle fait le travail une fois décochée.

Yechiel BD
la source
4
Cela résout le problème mais Console.WriteLine () ne génère plus de chaînes dans la fenêtre Sortie.
Pierre Fournier
2
Le problème persiste après avoir décoché la case sur une application console.
Zack
2
Cela fonctionne pour moi sur un projet client Windows. J'ai décoché la case, construit avec succès, puis re-vérifié et construit à nouveau avec succès.
Fei-Xue
1
ne fonctionne pas pour moi. Maintenant, l'application elle-même est verrouillée. ne pas héberger l'application.
Boris Ivanov
9

En fait, vous devriez vouloir "Activer le processus d'hébergement Visual Studio" coché. Au moins pour VS2010 de toute façon. Et j'ai aussi:

s'il existe "$ (TargetPath) .locked" del "$ (TargetPath) .locked" s'il existe "$ (TargetPath)" s'il n'existe pas "$ (TargetPath) .locked" move "$ (TargetPath)" "$ (TargetPath) .fermé à clé"

dans les options de pré-construction. Ce problème me préoccupe depuis très longtemps et ce n'est que lorsque John W. a mentionné cette case à cocher que j'ai même remarqué qu'elle existait et qu'elle était faible et que c'était déjà décochée.

Notez également que -app-vshost.exe s'exécute en arrière-plan même lorsqu'il n'est pas en cours de débogage. C'est ce qui fait qu'il est construit et exécuté avec succès à chaque fois, je suppose. Il ne fonctionnait pas avant. Et j'ai également essayé de nettoyer les dossiers de débogage et de publication et de changer constamment le type de cible et rien ne fonctionnait sauf comme décrit ci-dessus. Ma solution avant était d'attendre 5 minutes entre les builds, ce qui devenait super ennuyeux et long pour faire quoi que ce soit. Je n'ai vu aucun changement de comportement où il importait quels onglets étaient ouverts ou XNA vs Windows ou les concepteurs ouverts. Ce problème se produisait dans les versions 32 bits ou 64 bits et n'avait pas d'importance si je tuais une application avec ALT-F4 ou si je la tuais avec le gestionnaire de tâches, ce qui, en théorie, ne permettrait pas à l'application de fermer ou de libérer des ressources. Au début, je pensais que c'était un problème de ramassage des ordures.

Justin W
la source
Le script d'événement de pré-construction ici a finalement corrigé cela pour moi - merci!
Christopher
C'était le seul commentaire qui ait jamais fait quoi que ce soit pour moi, je ne pouvais pas croire qu'un problème aussi simple continue d'exister pendant des années sans correctifs.
ConstantineK
7

VS2017 - Résolu en fermant toutes les instances de MSBuild.exe dans le gestionnaire de tâches Windows

Lloyd
la source
5

Un peu tard pour répondre, mais je résous ce problème en allant dans les propriétés du projet> onglet "Déboguer"> décochez "Activer le processus d'hébergement de Visual Studio".

John Willemse
la source
4

J'ai surmonté ce problème en renommant le fichier verrouillé (à l'aide de l'Explorateur Windows). Je n'ai pas été autorisé à supprimer le fichier, mais renommer le fichier verrouillé fonctionne!

Ola Eldøy
la source
C'était la seule solution qui a fonctionné pour moi jusqu'à présent. Excellente solution. Me sauve la peine de redémarrer.
JHubbard80
Ce serait bien d'avoir cela comme pré-construction. J'ai toujours ce problème! Si ennuyant.
Shimmy Weitzhandler
4

J'ai résolu cela en supprimant le dossier bin \ Debug et, éventuellement, en redémarrant VS

Johannes Wentu
la source
Le problème est que vous ne pouvez pas faire cela à chaque fois. Pour moi, une erreur se produit chaque fois que je reconstruis puis que j'essaye d'exécuter l'application.
FrenkyB
2

Pour moi, c'était un service Windows qui était installé et en cours d'exécution. Une fois que je l'ai arrêté, la construction a réussi.

Garnison Neely
la source
2

Exécutez cette commande à partir de la zone Exécuter:

net stop iisadmin /y

puis

iisreset

travaillé pour moi. vs 2003

toha
la source
1

Récemment rencontré ce problème lors de la tentative de création d'une solution sur laquelle je travaille (pas seulement un projet winforms).
En plus de l' buildéchec, j'ai remarqué que les projets de nettoyage échouaient silencieusement (la vérification du dossier bin montrait que les fichiers n'avaient pas été réellement effacés) et la fermeture de Visual Studio ne mettait pas fin au devenvprocessus - au contraire, cela provoquait son blocage. Le processus de récupération de Windows redémarrerait alors Visual Studio.

Après quelques essais et erreurs, j'ai trouvé que les problèmes ne m'arrivaient que lorsque j'ai ouvert la solution à partir du menu "Récent" au démarrage de VS.
En ouvrant la solution, File >> Open >> Project/Solutionelle fonctionne normalement.

Actuellement, je ne sais pas pourquoi - je vais continuer à chercher cela, mais pour l'instant, au moins je peux travailler!

Guy Passy
la source
1

Vérifiez simplement les références et supprimez l'auto-référence au projet.

Explication: Mon problème a commencé après la création d'un contrôle personnalisé et le glisser-déposer dans la palette de la boîte à outils pour l'utiliser dans les formulaires de conception. Un avertissement est d'abord apparu indiquant qu'il y avait une redondance entre le fichier source de contrôle personnalisé (.cs) et l'exécutable du projet (.exe). Lors de l'exécution / débogage est apparu l'erreur: impossible d'accéder au (.exe) car il est utilisé (et c'était vrai).

J'ai littéralement supprimé tout le code source concernant le contrôle personnalisé et le problème subsistait, jusqu'à ce que je vérifie les références et qu'il se référençait lui-même afin de «pouvoir» obtenir l'ancien contrôle personnalisé. J'ai supprimé la référence et c'est fait !!

David Silva-Barrera
la source
1

J'ai eu le même problème sur mon application Xamarin dans Visual Studio et il a été résolu en débranchant mon appareil mobile de test. L'application a été fermée et le débogueur arrêté, mais l'erreur se produisait toujours lors de la tentative de génération ou de reconstruction de la solution. Il ne s'est arrêté qu'après avoir débranché l'appareil car je devais recevoir un appel.

Tomislav3008
la source
1

Juste pour jeter mes 2 cents. Mon problème a été résolu en ouvrant le Gestionnaire des tâches et en tuant l'application. Il fonctionnait en arrière-plan sans aucune indication qu'il fonctionnait du tout (aucun élément dans la barre des tâches, aucune interface utilisateur, rien), mais je ne sais pas pourquoi cela s'est produit. De toute évidence, le débogueur ne fonctionnait pas et je n'avais qu'une seule instance de VS ouverte à l'époque. Cela m'étonne que cela se passe toujours dans ce VS 2017.

Je peux peut-être ajouter une étape de construction qui recherche l'application exécutant l'arrière-plan et la tue avant de démarrer la nouvelle.

Benjamin McGill
la source
1

J'ai eu le même problème et je n'ai pas pu rectifier en utilisant l'une des méthodes mentionnées dans les réponses précédentes. J'ai résolu le problème en tuant toutes les instances de "SSIS Debug Hist (32 bits)" dans le gestionnaire de tâches et en travaillant maintenant normalement.

BM
la source
0

Comment votre application Web est-elle configurée? Fonctionne-t-il sous Cassini (le serveur Web du plateau) ou IIS?

Cela ne devrait pas arriver normalement. Je pense que ProcessExplorer peut vous dire quels fichiers un processus a verrouillés. Si ce n'est pas l'explorateur de processus, l'un des autres outils sysinternals.

Une chose à essayer avant même de télécharger l'un des outils SI est d'arrêter le serveur Web Cassini et de voir si cela libère le fichier.

Andy
la source
Ce n'est pas une application Web; ce sont des winforms.
Shaul Behr le
3
Ah, alors vous voudrez peut-être modifier votre question en commençant par "J'ai une application de formulaires Web C # ..."
Andy
0

Ce qui a fonctionné pour moi a été de redémarrer IIS

Beanwah
la source
0

J'ai eu ce même problème aussi. changer la configuration de débogage / version n'a pas fait l'affaire. du moins pas sans construire entre les deux.

dans ma solution (winform), il a été résolu en ouvrant le mainform du winform dans le concepteur. passage au code (F7). Puis fermez le code, fermez le concepteur du winform et reconstruisez tout (ctrl-shift-B). Cela a fonctionné pour moi.

semble qu'une sorte de handle de l'application winform (qui exécute un backgroundworker) avait encore un handle de fichier sur certaines des autres bibliothèques utilisées.

Obélix
la source
0

J'ai eu deux instances de Visual Studio ouvert la même solution.

Janis S.
la source
0

Dans mon cas, il y avait des processus vstest en cours d'exécution (avec différents noms mais contenant tous la chaîne vstest). J'ai dû les terminer dans taskmgr.

JT
la source
0

Même erreur, résolue en mettant à jour les packages d'assistance Google Nuget

Gustavo Baiocchi Costa
la source
0

Quand j'ai terminé le processus .Net Core Host, tout s'est bien passé. Je n'ai pas eu à fermer Visual Studio ni à modifier quoi que ce soit d'autre.

slimeygecko
la source
0

Pour ceux qui développent dans VS avec Docker, redémarrez le docker pour le service Windows et le problème sera résolu immédiatement.

Avant de redémarrer docker, j'ai essayé toutes les réponses mentionnées, je n'ai pas trouvé de processus msbuild.exe en cours d'exécution, j'ai également essayé de redémarrer VS sans succès, seul le redémarrage de docker fonctionnait.

Carlos
la source
0

Une autre solution: lorsque les fichiers sont verrouillés, le processus de blocage est signalé (quelque chose comme "ServiceHub.Host.CLR.x64 (7764)") avec son identifiant entre parenthèses. Pour vous débarrasser du processus, ouvrez PowerShell (x + Win + I) et tapez: "Stop-Process -Id idNumber".

TripleAccrétion
la source
0

J'ai récemment rencontré le problème lors du déploiement sur Service Fabric. L'erreur implique qu'un «fichier» est en cours d'utilisation, cependant, j'ai trouvé que le port était utilisé par un autre IDE. En arrêtant un service en cours d'exécution qui hébergeait déjà sur le port, j'ai pu empêcher cette exception de se produire.

osoclever
la source
0

J'avais fait face au même problème. J'ai essayé plusieurs solutions énumérées ci-dessus mais elles n'ont pas fonctionné pour moi.

J'ai résolu ce problème en fermant la connexion à partir de l'explorateur de serveurs et en fermant tous les onglets ouverts dans Visual Studio.

Jayesh Baviskar
la source
0

S'il s'agit d'un projet SSIS, ouvrez le gestionnaire de tâches et supprimez toutes les instances de DtsDebugHost.exe, ce qui devrait libérer les fichiers verrouillés.

metabuddy
la source
0

J'utilise Visual Studio Code et j'ai reçu cette erreur car le serveur de développement était en cours d'exécution (j'ai exécuté le serveur de développement en appuyant sur Ctrl + F5).

Ainsi, j'ai juste cliqué sur le panneau d'arrêt pour l'arrêter et l'erreur a disparu.

Seif
la source
0

J'ai eu ce problème (et c'est un problème que j'ai vu dans d'autres endroits pas seulement VS).

C'est causé par Dropbox (dans mon cas). Après avoir modifié du code et appuyé sur Exécuter, Dropbox verrouille parfois immédiatement le fichier (afin qu'il puisse le traiter).

Solution 1. Appuyez à nouveau sur Exécuter

Solution 2. Suspendez la boîte de dépôt. (pas bon si vous utilisez Dropbox comme sauvegarde cloud)

Solution 3. Supprimez le dossier de construction de la liste de synchronisation des boîtes de dépôt.

KevinLeeSmith
la source
0

La suppression d'Obj, le dossier de vente au détail et de débogage du projet .NET et la reconstruction ont de nouveau fonctionné pour moi.

Siddhant Gupta
la source