L'operazione richiesta non può essere eseguita su un file con una sezione mappata dall'utente aperta


210

Ogni volta che ho provato a copiare 4 file nella mia cartella bin, dopo aver interrotto il servizio principale, ricevo un errore con un file (TexteDll). L'errore è:

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

Potrebbe essere dovuto al blocco del sistema. O forse un altro processo sta usando questa DLL. Quando ho cercato su Google, ho scoperto che il riavvio del sistema potrebbe risolvere questo problema.

Qualcuno può suggerire una causa o una soluzione per questo? Ho controllato le proprietà di TexteDll (generale, versione, sicurezza, ecc.). Sembra tutto normale.



8
ci sono in realtà molti più "duplicati" della domanda (ad esempio: stackoverflow.com/questions/1818076/… ) - il problema è che ogni volta che la causa principale è diversa.
MaciekTalaska

6
la prossima volta prova a usare "process explorer" dal sito di microsoft. Ha una funzione chiamata "trova handle". cerca il tuo file lì dentro e ti mostrerà quale processo ha un handle su quel file. Quindi puoi iniziare a indagare sul motivo per cui quel programma ha tale accesso. A proposito, l'arresto di un servizio non significa necessariamente che l'eseguibile che il servizio host finirà. Un eseguibile può ospitare più servizi. Nel peggiore dei casi, molti servizi .net che utilizzano enormi quantità di memoria tendono a terminare dopo aver rilasciato quella memoria che si verifica a volte pochi minuti dopo l'evento di arresto del servizio.
Erdogan Kurtur,

3
Hehehe Visual Studio stava bloccando la mia DLL. Chiuso Visual Studio e ho provato a ricostruire la soluzione e ha funzionato.
Leniel Maccaferri,

Questo è ovviamente un conflitto di memoria. Una particolare 'istanza' dell'oggetto ha un po 'di memoria bit allocata mappata, poi scopre che la memoria (staticamente?) Allocata ad essa, è già stata mappata altrove, probabilmente con un diverso livello di accesso al sistema.
ouflak,

Risposte:


177

Nel mio caso è stato Explorer a bloccare la DLL che è stata compilata nella cartella Debug ... Strano, vero?

L'ho scoperto usando uno strumento chiamato Unlocker.

Ho dovuto cancellare con Unlocker, anche quando diceva che non c'era nessun blocco sul file e non potevo cancellare la cartella fino a quando non ho cancellato quel singolo file ...

Successivamente è stato compilato.

MODIFICARE:

Ho scoperto perché nel mio caso stava succedendo. Ho avuto la DLL aperta in un editor di testo all'interno di Visual Studio ...


33
Ho aperto il dlo anche in una delle mie tante finestre di Visual Studio. Grazie per aver pubblicato quell'aggiornamento.
ptfaulkner,

3
Stessa cosa, in qualche modo la DLL danneggiata era aperta in una finestra di testo nell'editor.
Harv,

3
DLL aperta come una scheda anche in VS! Grazie!
Connell,

5
Informativa completa: il link a "Unlocker" è uno spyware totale. Installa ogni sorta di barre degli strumenti e schifezze, anche se deselezioni tutte le caselle dicendo che non le vuoi.
Tim

7
Utilizzare Process Explorer per istruzioni su Unlocker. Una volta che PE è in esecuzione, vai su Trova -> Trova handle o DLL e incolla il nome del file bloccato. Mostrerà quale processo lo ha bloccato. Uccidilo se sei sicuro che va bene farlo e il problema dovrebbe essere risolto.
Nikita G.,

71
  • A volte, quando si fa doppio clic su un avviso relativo alla mancata corrispondenza della versione dell'assieme di riferimento tra due o più progetti, si dimentica di chiudere la finestra della vista dell'assieme e rimane lì tra le altre schede ... quindi si finisce con l'assemblaggio bloccato da VS stesso e mi ci è voluto molto tempo per capirlo :)

    Prestare attenzione alla potenza fornita da VS;)

  • Un altro scenario fittizio. A volte semplicemente cancellando l'intera cartella obj o solo il file avvisato come quello bloccato aiuta con questo errore schifoso.

2
risolto il problema per me ... Ho anche riavviato il sistema ma VS ha riaperto la finestra della vista dell'assieme. Chiudere tutte le schede ha fatto il lavoro. Saluti
Dave Lawrence,

35

chiudi tutti i documenti su VS e prova a ricostruire di nuovo. Se non funziona, riavvia VS. Questo problema è legato al blocco dei file DLL.


3
lo stesso, qualche stranezza con VS. riavvio ordinato per me.
PJUK,

1
Questo ha funzionato per me. Cosa strana nella mia particolare circostanza. Avevo eseguito il mio exe autonomo, al di fuori dell'ambiente VS. L'ho lasciato in esecuzione durante la notte (test della memoria - è passato), lo ha spento al mattino, un paio di piccole modifiche al codice e all'improvviso non è stato possibile completare la mia build a causa di ciò. Strano come questo ricordo sembrasse entrare in conflitto in questo modo.
ouflak,

Brutto, grazie, un documento aperto stava causando l'errore, cosa BS!
Brian Ogden,

"Chiudi tutti i documenti" e la ricostruzione ha funzionato davvero per me! : o
Antoine Meltzheim,

11

Chiudi Visual Studio, elimina bin, cartella di rilascio debug e riavvia Visual Studio Project. questo ha risolto il mio problema


Questo ha funzionato per me! Grazie! Ho rinominato le directory, per ogni evenienza e ha funzionato.
DavidScherer,


10

Sono uno sviluppatore e non mi piacciono le app iniettate in Registery come Unlocker. Ho usato SysInternals Process Explorer che ha bloccato il mio dll Find > Find Handle or Dll [Ctrl-F]e ucciso il processo.


1
Trovato che è stato bloccato da un processo VS che non è morto quando VS è stato chiuso.
Yoztastic,

2
Anche dopo che DevEnv è stato chiuso e Task Manager non l'ha mostrato, Process Explorer ha mostrato diverse istanze di DevEnv Suspended. Uccidili e ha funzionato.
DeclanMcD,

1
Questa è la risposta più corretta, poiché mostra come trovare quale processo sta bloccando il file, piuttosto che dire semplicemente "nel mio caso era dovuto a X". Ogni sviluppatore su Windows trarrebbe beneficio dall'aggiunta di procexp e procmon alla propria cintura!
Matt Wanchap,

9

Altri hanno già stabilito che questo errore è dovuto a un'altra applicazione che ha un blocco sul file. Volevo solo sottolineare che git diffblocca anche i file fino a quando non esci da esso. Questo è ciò che ha causato questo nel mio caso.


Lo stesso problema per me. Ho dimenticato di non aver lasciato il diff. Sfortunatamente, non ho visto questa risposta fino a quando ho chiuso un sacco di altre finestre e ho visto che era ancora in una diff. Quindi mi sono assicurato di non aver pubblicato una risposta
doppia

1
@codeMagic Git 2.23 (Q3 2019) eviterà quella trappola. Vedi la mia risposta qui sotto
VonC

9

Ho avuto lo stesso problema. Come ho risolto è stato:

  1. Apri "Task Manager"
  2. Termina task "Explorer.exe"
  3. Fai clic su "File" -> Crea nuova attività - Digita "explorer.exe" -> OK
  4. Pulisci il mio progetto e funziona

Ho anche dovuto riavviare il processo Explorer da Task Manager. Nel mio caso, avevo visualizzato il file "problematico" nell'area "Anteprima" di Explorer. Questo sembra anche bloccare i file di volta in volta senza mai rilasciarli. La chiusura di tutte le finestre di Explorer non ha aiutato. Ho dovuto riavviare il processo.
gehho,

Finalmente! Grazie.
TheJack

6

Stai eseguendo un software antivirus. È possibile che il software AV (o qualche altro software) stia leggendo il file utilizzando le API di mappatura dei file che hanno causato il problema.


6

Nel mio caso ho dovuto interrompere un MSBuild.exeprocesso in sospeso che stava bloccando il file (era lì anche dopo aver chiuso Visual Studio).


1
L'hai inchiodato. Molte grazie!
Larry,

4

L'eliminazione della cartella obj e la ricostruzione hanno funzionato per me


3

Ho avuto lo stesso problema. Il riavvio non ha funzionato per me. C'era un processo chiamato VBSCompiler era in esecuzione nel task manager. Ho dovuto terminare il processo per correggere questo errore.


Puoi anche pulire la soluzione e riprovare
Nirjhar Vermani,

3

Nessuna delle soluzioni pubblicate qui ha funzionato per me. Era devenv.exe (Visual Studio) che bloccava il file, ma se lo avessi riavviato, lo avrebbe bloccato nuovamente.

Stranamente, Windows non mi ha permesso di eliminare i file (nel cestino), ma Shift + Delete (eliminazione permanente) ha funzionato.


2

Chiudi Visual Studio ed eseguilo come amministratore. Ha risolto il mio problema.


Stavo ricevendo questo errore durante la creazione di un'app brillante in rstudio, quindi molte di queste risposte non mi sono state utili. Ma ho visto questo e ho provato a riavviare rstudio come amministratore, e ha funzionato. Quindi quando sono tornato a funzionare come utente ha funzionato di nuovo.
Paul,

2

La soluzione per me è stata quella di chiudere tutte le istanze di VS e di eliminare tutti i processi sospesi di devenv.exe.


2

La soluzione per me era riavviare il computer.


2

È stato sottolineato nel 2016 da Andrew Cuthbert che git diff blocca anche i file fino a quando non si esce da esso.

Questo non sarà il caso di Git 2.23 (3 ° trimestre 2019)

Vedi commit 3aef54e (11 lug 2019) di Johannes Schindelin ( dscho) .
(Unito da Junio ​​C Hamano -gitster - in commit d9beb46 , 25 lug 2019)

diff: munmap() contenuto del file prima di eseguire diff esterno

Quando si esegue un diff esterno da, diciamo, a diff tool, è lecito ritenere che desideriamo scrivere i file in questione.
Su Windows, ciò significa che non può esserci nessun altro processo che trattiene un handle aperto per detti file, o anche solo una regione mappata.

Quindi assicuriamoci git diff non trattiene alcun handle aperto per i file in questione.

In effetti, rilasceremo immediatamente la coppia di file, poiché il diff esterno utilizza i file che abbiamo appena scritto, quindi non è più necessario conservare il contenuto del file in memoria.

Questo risolve git-for-windows # 1315


1

Stavo vedendo questi errori durante la creazione di applicazioni Dot Net con Ant.

Nel mio caso era il nostro software di backup aziendale, Symantec DLO Agent. Fermarlo ed escludere la directory dal mio software antivirus e chiudere Visual Studio sembra funzionare.


1

nel mio caso ho eliminato la cartella obj nella radice del progetto e il progetto di ricostruzione ha risolto il mio problema !!!


0

Ho riscontrato questo errore e si è scoperto che il problema era che FxCop era in esecuzione sul mio progetto. Ho chiuso FxCop e quindi ho potuto compilare di nuovo.


0

Se si tratta di un'applicazione Web che elimina i file nella cartella dei file temporanei ASP.NET potrebbe essere una soluzione.


0

Se stai utilizzando profiler come AQ Time, questi potrebbero anche bloccare il file. La soluzione in questo caso sarebbe quella di riavviare il profiler o semplicemente scaricare / caricare l'assembly in questione dal profiler. Per AQ Time ho notato che sta rilasciando il file dopo un po 'di tempo, ma per la vita non posso dire quale sia il timeout. Sembra essere casuale



0

Ho avuto questo errore causato da un 'più' vs file in questione lasciato in esecuzione in un'altra console. Ops.


0

Nessuna delle precedenti ha risolto questo problema.

Qualcuno aveva un progetto nella mia soluzione impostato per utilizzare la CPU x64 nella configurazione della build. Modificandolo su Qualsiasi CPU, la build utilizzava una nuova cartella. Ancora non so quale processo avesse (ha) un blocco su quel file.


0

Ho avuto lo stesso problema . Ho rimosso la dll dalla cartella temporanea, ho rimosso l'accesso in sola lettura e ho riavviato la macchina e l'ho fatta funzionare.


0

Nel mio caso, chiudo solo tutte le istanze e copio la mia cartella dell'applicazione radice e la incollo in una posizione diversa, quindi apro la soluzione in VS funziona ....


-1

Il mio problema è stato risolto anche passando al setaccio Process Explorer. Tuttavia, il processo che ho dovuto uccidere è stato MySQL Notifier.exe che era ancora in esecuzione dopo aver chiuso tutte le applicazioni VS e SQL.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.