L'opération demandée ne peut pas être effectuée sur un fichier avec une section mappée par l'utilisateur ouverte

210

Chaque fois que j'ai essayé de copier 4 fichiers dans mon dossier bin, après avoir arrêté le service principal, je reçois une erreur avec un fichier (TexteDll). L'erreur est:

Cannot copy TexteDll: The requested operation cannot be performed on a file 
with a user-mapped section open

Cela peut être dû à un verrouillage du système. Ou peut-être qu'un autre processus utilise cette DLL. Quand j'ai googlé, j'ai trouvé que le redémarrage du système peut résoudre ce problème.

Quelqu'un peut-il suggérer une cause ou une solution à cela? J'ai inspecté les propriétés de TexteDll (général, version, sécurité, etc.). Tout semble normal.

peter
la source
8
il y a en fait beaucoup plus de «doublons» de la question (par exemple: stackoverflow.com/questions/1818076/… ) - le problème est que chaque fois que la cause première est quelque chose de différent.
MaciekTalaska
6
la prochaine fois, essayez d'utiliser "Process Explorer" sur le site de Microsoft. Il a une fonctionnalité appelée "find handle". recherchez votre fichier là-dedans et il vous montrera quel processus a une poignée sur ce fichier. Ensuite, vous pouvez commencer à chercher pourquoi ce programme a cet accès. BTW, l'arrêt d'un service ne signifie pas nécessairement que l'exécutable qui héberge le service prendra fin. Un exécutable peut héberger plusieurs services. Dans le pire des cas, de nombreux services .net qui utilisent d'énormes quantités de mémoire ont tendance à se terminer après avoir libéré cette mémoire, ce qui se produit parfois quelques minutes après l'événement d'arrêt du service.
Erdogan Kurtur
3
Hehehe Visual Studio verrouillait ma DLL. Fermez Visual Studio et essayez de reconstruire la solution et cela fonctionne.
Leniel Maccaferri
Il s'agit évidemment d'un conflit de mémoire. Une «instance» particulière de l'objet a une certaine mémoire binaire allouée mappée, puis découvre plus tard que la mémoire (statiquement?) Qui lui est allouée, a déjà été mappée ailleurs, probablement avec un niveau d'accès système différent.
ouflak

Réponses:

177

Dans mon cas, c'est l'Explorateur qui verrouillait la DLL qui a été compilée dans le dossier Debug ... Étrange, n'est-ce pas?

J'ai découvert en utilisant un outil appelé Unlocker.

J'ai dû supprimer avec Unlocker, même quand il disait qu'il n'y avait pas de verrou sur le fichier, et je ne pouvais pas supprimer le dossier tant que je n'avais pas supprimé ce fichier unique ...

Après cela, il a compilé.

ÉDITER:

J'ai découvert pourquoi, dans mon cas, cela se produisait. J'ai fait ouvrir la DLL dans un éditeur de texte dans Visual Studio ...

Daniel Lobo
la source
33
J'ai également ouvert le dlo dans l'une de mes nombreuses fenêtres de studio visuel. Merci d'avoir publié cette mise à jour.
ptfaulkner
3
Même chose, en quelque sorte la DLL suspendue était ouverte dans une fenêtre de texte dans l'éditeur.
Harv
3
DLL ouverte comme un onglet dans VS aussi! Je vous remercie!
Connell
5
Divulgation complète: le lien vers "Unlocker" est un spyware total. Il installe toutes sortes de barres d'outils et de conneries, même si vous décochez toutes les cases en disant que vous ne les voulez pas.
Tim
7
Utilisation Process Explorer au lieu de Unlocker. Une fois que PE est en cours d'exécution, accédez à Rechercher -> Rechercher la poignée ou la DLL et collez le nom du fichier verrouillé. Il montrera quel processus l'a verrouillé. Tuez-le si vous êtes sûr que vous pouvez le faire et que le problème doit être résolu.
Nikita G.
71
  • Parfois, lorsque vous double-cliquez sur un avertissement concernant la non-correspondance de la version de l'assembly référencé entre deux ou plusieurs projets, vous oubliez de fermer la fenêtre de la vue de l'assembly et elle y reste parmi d'autres onglets ... vous vous retrouvez donc avec l'assembly verrouillé par VS lui-même et il m'a fallu beaucoup de temps pour comprendre cela :)

    Soyez prudent avec la puissance fournie par VS;)

  • Un autre scénario fictif. Parfois, il suffit de supprimer tout le dossier obj ou simplement le fichier averti car celui verrouillé aide à cette erreur de merde.
Arman McHitarian
la source
2
trié pour moi ... J'ai même fait un redémarrage du système mais VS a rouvert la fenêtre de vue de l'assemblage. La fermeture de tous les onglets a fait l'affaire. Acclamations
Dave Lawrence
35

fermez tous les documents sur VS et essayez de reconstruire à nouveau. Si cela ne fonctionne pas, redémarrez VS. Ce problème est lié au verrouillage des fichiers DLL.

cihata87
la source
3
même, une certaine bizarrerie avec VS. redémarrer l'a trié pour moi.
PJUK
1
Cela a fonctionné pour moi. Chose étrange dans ma situation particulière. J'avais exécuté mon exe de façon autonome, en dehors de l'environnement VS. Je l'ai laissé fonctionner toute la nuit (test de mémoire - il a réussi), l'ai arrêté le matin, quelques petits changements de code, et soudain, je n'ai pas pu terminer ma génération à cause de cela. Bizarre comme cette mémoire semblait entrer en conflit comme ça.
ouflak
Méchant, merci, un document ouvert était à l'origine de l'erreur, quel BS!
Brian Ogden
"Fermer tous les documents" et la reconstruction ont réellement fonctionné pour moi! : o
Antoine Meltzheim
11

Fermez Visual Studio, supprimez le bac, déboguez le dossier des versions et redémarrez le projet Visual Studio. qui a résolu mon problème

user2038221
la source
Cela a fonctionné pour moi! Merci! J'ai renommé les répertoires, juste au cas où et cela a fonctionné.
DavidScherer
10

J'ai eu le même problème et dans mon cas, il est apparu que le fichier de sortie existant était verrouillé par une autre application.

Vous pouvez vérifier quelle application verrouille votre fichier de sortie avec OpenedFilesView: http://www.nirsoft.net/utils/opened_files_view.html

bozydar.sz
la source
10

Je suis développeur et je n'aime pas les applications injectées dans Registery comme Unlocker. J'ai utilisé SysInternals Process Explorer, lequel processus a verrouillé ma DLL Find > Find Handle or Dll [Ctrl-F]et a tué le processus.

guneysus
la source
1
Trouvé, il a été verrouillé par un processus VS qui n'est pas mort lorsque VS a été fermé.
Yoztastic
2
Même après la fermeture de DevEnv et le Gestionnaire des tâches ne l'affichait pas, Process Explorer montrait plusieurs instances de DevEnv suspendu. Tuez-les et cela a fonctionné.
DeclanMcD
1
C'est la réponse la plus correcte, car elle montre comment trouver quel processus verrouille le fichier, plutôt que de simplement dire "dans mon cas, c'était dû à X". Chaque développeur sur Windows gagnerait à ajouter procexp et procmon à sa ceinture d'outils!
Matt Wanchap
9

D'autres ont déjà établi que cette erreur est due à une autre application ayant un verrou sur le fichier. Je voulais juste souligner que cela git diffverrouille également les fichiers jusqu'à ce que vous quittiez. C'est ce qui a causé cela dans mon cas.

andrew.cuthbert
la source
Même problème pour moi. J'ai oublié que je n'avais pas quitté le diff. Malheureusement, je n'ai pas vu cette réponse avant d'avoir fermé un tas d'autres fenêtres et vu qu'elle était toujours dans un diff. Je m'assurais ensuite de ne pas poster de réponse dupe, alors +1 :)
codeMagic
1
@codeMagic Git 2.23 (Q3 2019) évitera ce piège. Voir ma réponse ci
VonC
9

J'ai eu le même problème. Comment je l'ai résolu:

  1. Ouvrez le "Gestionnaire des tâches"
  2. Fin de la tâche "Explorer.exe"
  3. Cliquez sur "Fichier" -> Créer une nouvelle tâche - Tapez "explorer.exe" -> OK
  4. Nettoyer mon projet et ça marche
user10991945
la source
J'ai également dû redémarrer le processus Explorer à partir du Gestionnaire des tâches. Dans mon cas, j'avais vu le fichier "problématique" dans la zone "Aperçu" de l'explorateur. Cela semble également verrouiller des fichiers de temps en temps sans jamais les libérer. La fermeture de toutes les fenêtres de l'Explorateur n'a pas aidé. J'ai dû redémarrer le processus.
gehho
Finalement! Je vous remercie.
TheJack
6

Utilisez-vous un logiciel antivirus. Il est possible que le logiciel AV (ou un autre logiciel) ait lu le fichier à l'aide des API de mappage de fichiers qui ont causé le problème.

Eoin Campbell
la source
6

Dans mon cas, j'ai dû tuer un MSBuild.exeprocessus suspendu qui bloquait le fichier (il était là même après avoir fermé Visual Studio).

t3chb0t
la source
1
Vous avez réussi. Merci beaucoup!
Larry
4

La suppression du dossier obj et la reconstruction ont fonctionné pour moi

colmde
la source
3

J'ai eu le même problème. Le redémarrage n'a pas fonctionné pour moi. Il y avait un processus appelé VBSCompiler en cours d'exécution dans le gestionnaire de tâches. J'ai dû mettre fin au processus pour corriger cette erreur.

Nirjhar Vermani
la source
Vous pouvez également nettoyer votre solution et réessayer
Nirjhar Vermani
3

Aucune des solutions affichées ici n'a fonctionné pour moi. C'était devenv.exe (Visual Studio) verrouillant le fichier, mais si je le redémarrais, il le reverrouillerait.

Bizarrement, Windows ne me laissait pas supprimer les fichiers (dans la corbeille), mais Shift + Delete (suppression permanente) fonctionnait.

makhdumi
la source
2

Fermez Visual Studio et exécutez-le en tant qu'administrateur. Il a résolu mon problème.

Sanjay Ghinaiya
la source
J'obtenais cette erreur lors de la construction d'une application brillante dans rstudio, donc beaucoup de ces réponses ne m'ont pas été utiles. Mais j'ai vu cela et j'ai essayé de redémarrer rstudio en tant qu'administrateur, et cela a fonctionné. Ensuite, quand je suis retourné à la course en tant qu'utilisateur, cela a de nouveau fonctionné.
Paul
2

La solution pour moi était de fermer toutes les instances de VS et de tuer tous les processus devenv.exe suspendus.

user2338408
la source
2

La solution pour moi était de redémarrer l'ordinateur.

ML13
la source
2

Il a été souligné en 2016 par Andrew Cuthbert que git diff verrouille également les fichiers jusqu'à ce que vous en quittiez.

Ce ne sera pas le cas avec Git 2.23 (Q3 2019)

Voir commit 3aef54e (11 juil.2019 ) de Johannes Schindelin ( dscho) .
(Fusionné par Junio ​​C Hamano - gitster- en commit d9beb46 , 25 juil.2019 )

diff: munmap() contenu du fichier avant d'exécuter un diff externe

Lors de l'exécution d'un diff externe de, disons, a diff tool, il est sûr de supposer que nous voulons écrire les fichiers en question.
Sous Windows, cela signifie qu'il ne peut y avoir aucun autre processus tenant une poignée ouverte sur lesdits fichiers, ou même juste une région mappée.

Alors assurons-nous que git diff lui même ne détient aucune poignée ouverte sur les fichiers en question.

En fait, nous allons simplement publier la paire de fichiers immédiatement, car le diff externe utilise les fichiers que nous venons d'écrire, nous n'avons donc plus besoin de conserver le contenu du fichier en mémoire.

Cela corrige git-for-windows # 1315

VonC
la source
1

Je voyais ces erreurs lors de la création d'applications Dot Net avec Ant.

Dans mon cas, il s'agissait de notre logiciel de sauvegarde d'entreprise, l'agent Symantec DLO. L'arrêter et exclure le répertoire de mon logiciel antivirus et fermer Visual Studio semble fonctionner.

Robert Bratton
la source
1

dans mon cas, supprimé le dossier obj dans la racine du projet et le projet de reconstruction a résolu mon problème !!!

Ali Rasouli
la source
0

J'ai rencontré cette erreur et il s'est avéré que le problème était que FxCop s'exécutait sur mon projet. J'ai fermé FxCop puis j'ai pu compiler à nouveau.

Tim
la source
0

S'il s'agit d'une application Web, la suppression de fichiers dans le dossier Fichiers ASP.NET temporaires peut être une solution.

super héros
la source
0

Si vous utilisez des profileurs comme AQ Time, ceux-ci peuvent également verrouiller le fichier. La solution dans ce cas serait de redémarrer le profileur ou simplement de décharger / charger l'ensemble en question du profileur. Pour AQ Time, j'ai remarqué qu'il libérait le fichier après un certain temps, mais je ne peux pas pour la vie de moi dire ce qu'est ce délai. Semble être aléatoire

souvenir d'un rêve
la source
0

J'ai aussi eu la même erreur aujourd'hui. J'ai résolu ce problème en reconstruisant le projet.

Siva Sankar Gorantla
la source
0

J'ai eu cette erreur causée par un fichier vs plus en question laissé en cours d'exécution dans une autre console. Oups.

ade jones
la source
0

Aucune des réponses ci-dessus n'a résolu ce problème.

Quelqu'un avait un projet dans ma solution configuré pour utiliser un processeur x64 dans la configuration de construction. Le changer en Any CPU a amené la génération à utiliser un nouveau dossier. Je ne sais toujours pas quel processus avait (a) un verrou sur ce fichier.

CM
la source
0

J'ai eu ce même problème. J'ai supprimé la DLL du dossier temporaire, supprimé l'accès en lecture seule et redémarré la machine et l'ai fait fonctionner.

Sarad Vishwakama
la source
0

Dans mon cas, je ferme simplement toutes les instances et copie mon dossier d'application racine et le colle dans un emplacement différent, puis ouvre la solution dans VS ça fonctionne ....

Appu
la source
-1

Mon problème a également été résolu en passant au crible l'Explorateur de processus. Cependant, le processus que j'ai dû tuer était le MySQL Notifier.exe qui était toujours en cours d'exécution après la fermeture de toutes les applications VS et SQL.

JN88
la source