Erro de compilação: “O processo não pode acessar o arquivo porque ele está sendo usado por outro processo”

88

Eu tenho um webformsaplicativo C # , que até hoje estava funcionando perfeitamente.

Hoje, de repente, toda vez que tento executar o aplicativo, recebo um erro de bloqueio de arquivo:

Não foi possível copiar o arquivo "obj \ Debug \ MyProject.exe" para "bin \ Debug \ MyProject.exe". O processo não pode acessar o arquivo "bin \ Debug \ MyProject.exe" porque ele está sendo usado por outro processo.

O erro no Google não mostra nada além do óbvio, ou seja, o VS acha que o arquivo está bloqueado. E é definitivamente o próprio Visual Studio que bloqueia o arquivo, porque quando eu fecho o VS e o abro novamente, o projeto é executado bem - na primeira vez. Quando tento executá-lo pela segunda vez, recebo o erro de bloqueio de arquivo.

Fechar o VS e reabrir sempre que desejo executar o aplicativo não é uma solução alternativa viável! Como descubro o que está bloqueando o arquivo e evito que ele seja bloqueado?

EDIT: Outra descoberta interessante: eu nem preciso executar o aplicativo. Apenas compilá-lo uma vez causa o bloqueio do arquivo; Não consigo compilar duas vezes seguidas!

Este problema é específico de um projeto em minha solução. Todos os outros projetos funcionam bem e podem ser executados quantas vezes eu quiser. É apenas esse projeto que se fecha.

Shaul Behr
fonte
você pode tentar matar o vshost.exe para ver se isso ajuda?
rene
@rene - não há processo vshost.exe. Eles renomearam isso no VS 2010?
Shaul Behr
[nome do seu aplicativo] .vshost.exe
rene
@rene - não, nada aparece nos processos atuais com esse nome
Shaul Behr
1
@Shaul você adicionou um controle de usuário personalizado ao seu formulário? tente fechar o designer antes de executar: stackoverflow.com/questions/2690119/…
rene

Respostas:

133

Eu encontrei uma solução simples que funciona para mim. É assim:

Quando o problema ocorrer, basta alterar a configuração do edifício na parte superior (se estiver em “Release” para “Debug” e vice-versa), construir e depois voltar à configuração anterior e construir novamente.

captura de tela

Suponho que alterar a configuração libera o vcshost e o devenv.

Yechiel BD
fonte
2
Melhor resposta, IMO. (Ah- ele deu a si mesmo o crédito.)
Jason P Sallinger
Esta é uma ótima solução alternativa! Embora às vezes pare de funcionar por algum motivo (?).
Christopher D. Emerson,
3
@ChrisEmerson Também percebi isso. Posso mudar para Release, construir e executar o aplicativo, mas não consigo nem mesmo construir o projeto depois de voltar para Debug.
Zack
Acabei tendo que reiniciar o Visual Studio para me livrar do assembly. Tentei redefinir o IIS e a solução acima, mas ainda consigo ver o arquivo dll na pasta C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL
Weihui Guo
1
Isso funcionou exatamente uma vez, e nunca mais. Nem mesmo depois de reiniciar o VS. Não importa o quanto eu alterne entre Release e Debug, ele falha.
Frank H.
24

Bem, resolvi o problema sozinho - embora ainda não tenha ideia do porquê. Decidi isolar o problema removendo todos os arquivos do projeto, depois adicionando-os novamente e determinando qual arquivo era a fonte do meu problema. Então, um por um eu reintroduzi os arquivos no projeto, compilei e limpei cada etapa do caminho ... até que ... adicionei o último ...

... e tudo ainda funcionou bem.

Fiz uma comparação com o controle de origem do meu .csproj original; sem diferenças reais. E mesmo quando tentei reverter para a versão anterior do .csproj, ainda funcionou.

Magia negra. Se funcionar, às vezes é melhor não perguntar por quê - apenas aceite e siga em frente ...

EDIT: O problema é recorrente, e eu acredito que o isolei quando tenho o criador de formulários aberto de uma forma abstrata / genérica em tempo de compilação.

Lição aprendida: certifique-se de que o Criador de formulários de quaisquer formulários ou controles abstratos ou genéricos esteja fechado antes de compilar! Caso contrário, você deve fechar o VS e reabrir!

Shaul Behr
fonte
1
Talvez seja porque o arquivo que estava apresentando o problema não está mais sendo acessado por nenhum processo desde que foi removido. Remover todos os arquivos DEVE resolver isso de fato. Bem pensado.
Jeff LaFay
2
Isso ainda acontece com projetos apenas de linha de comando (sem formulário), então não tenho certeza se você realmente sabe de algo.
Zack de
16

O que descobrimos aqui é o seguinte: Na página de propriedades do projeto, guia Depurar, desmarque a opção "Ativar processo de hospedagem do visual studio". Não tenho certeza para que serve essa propriedade, mas ela faz o trabalho depois de desmarcada.

Yechiel BD
fonte
4
Isso resolve o problema, mas Console.WriteLine () não produz mais strings na janela Output.
Pierre Fournier
2
O problema ainda persiste após desmarcar a caixa em um aplicativo de console.
Zack
2
Funciona para mim em um projeto de cliente Windows. Desmarquei a caixa, construí com sucesso e, em seguida, verifiquei novamente e construí com sucesso novamente.
Fei-Xue
1
não está funcionando para mim. Agora o próprio aplicativo está bloqueado. não hospedar aplicativo.
Boris Ivanov
9

Na verdade, você deve querer "Habilitar o processo de hospedagem do Visual Studio" marcada. Pelo menos para VS2010 de qualquer maneira. E eu também tenho:

se existir "$ (TargetPath) .locked" del "$ (TargetPath) .locked" se existir "$ (TargetPath)" se não existir "$ (TargetPath) .locked" mover "$ (TargetPath)" "$ (TargetPath) .locked "

nas opções de pré-construção. Este problema tem me perseguido por muito tempo e não foi até que John W. mencionou esta caixa de seleção que eu percebi que ela existia e estava baixa e eis que ela já estava desmarcada.

Observe também que -app-vshost.exe é executado em segundo plano, mesmo quando não está sendo depurado. Que é o que o torna construído e executado com sucesso todas as vezes, eu acho. Não estava funcionando antes. E também tentei limpar as pastas de depuração e liberação e alterar o tipo de destino constantemente e nada funcionou, exceto como descrito acima. Minha solução antes era apenas esperar 5 minutos entre as compilações, o que era muito chato e demorado para fazer qualquer coisa. Eu não vi nenhuma mudança no comportamento em que importava quais guias eram abertas ou XNA vs janelas ou designers sendo abertos. Esse problema ocorria em compilações de 32 ou 64 bits e não importava se eu encerrasse um aplicativo com ALT-F4 ou com o gerenciador de tarefas, o que, em teoria, não permitiria que o aplicativo fechasse ou liberasse recursos. No começo eu pensei que era um problema de coleta de lixo.

Justin W
fonte
O script de evento de pré-criação aqui finalmente corrigiu isso para mim - obrigado!
Christopher D. Emerson,
Este foi o único comentário que fez alguma coisa por mim, eu não podia acreditar que um problema tão simples continuasse a existir por anos sem patches.
ConstantineK de
7

VS2017 - Resolvido fechando todas as instâncias de MSBuild.exe no gerenciador de tarefas do Windows

Lloyd
fonte
5

Um pouco tarde para responder, mas resolvo isso indo até as propriedades do projeto> aba "Debug"> desmarque "Habilitar processo de hospedagem do Visual Studio".

John Willemse
fonte
4

Superei esse problema renomeando o arquivo bloqueado (usando o Windows Explorer). Não tive permissão para deletar o arquivo, mas renomear o arquivo bloqueado funciona!

Ola Eldøy
fonte
Esta foi a única solução que funcionou para mim até agora. Ótima solução. Me poupa do trabalho de reinicializar.
JHubbard80
Seria bom ter isso como uma pré-construção. Eu sempre tenho esse problema! Tão irritante.
Shimmy Weitzhandler
4

Resolvi isso excluindo a pasta bin \ Debug e, possivelmente, reiniciando o VS

Johannes Wentu
fonte
O problema é que você não pode fazer isso todas as vezes. Para mim, o erro acontece toda vez que eu reconstruo e tento executar o aplicativo.
FrenkyB 01 de
2

Para mim, era um serviço do Windows instalado e funcionando. Assim que o interrompi, a construção foi bem-sucedida.

Garrison Neely
fonte
2

Execute este comando na caixa Executar:

net stop iisadmin /y

e depois

iisreset

trabalhou para mim. vs 2003

toha
fonte
1

Recentemente, encontrei esse problema ao tentar construir uma solução na qual estou trabalhando (não apenas um projeto winforms).
Além da buildfalha, percebi que os projetos de limpeza falhavam silenciosamente (a verificação da pasta bin mostrou que os arquivos não haviam sido realmente apagados) e o fechamento do Visual Studio não encerrou o devenvprocesso - em vez disso, ele travou. O processo de recuperação do Windows reiniciaria o Visual Studio.

Depois de algumas tentativas e erros, descobri que os problemas só aconteceram quando abri a solução no menu "Recentes" ao iniciar o VS.
Ao abrir a solução, File >> Open >> Project/Solutionela estava funcionando normalmente.

Atualmente não tenho ideia do porquê - vou continuar investigando isso, mas por agora, pelo menos eu posso trabalhar!

Guy Passy
fonte
1

Basta verificar as referências e remover a autorreferência ao projeto.

Explicação: Meu problema começou depois de criar um controle personalizado e arrastá-lo e soltá-lo na paleta da caixa de ferramentas para usá-lo em formulários de design. Primeiro apareceu um aviso dizendo que havia uma redundância entre o arquivo de origem do controle personalizado (.cs) e o executável do projeto (.exe). Ao executar / depurar apareceu o erro: não foi possível acessar o (.exe) porque está sendo usado (e era verdade).

Eu literalmente removi todo o código-fonte referente ao controle personalizado e o problema ainda permaneceu, até que eu verifiquei as referências e ele estava referenciando a si mesmo para "ser capaz" de obter o controle personalizado anterior. Eu removi a referência e pronto !!

David Silva-Barrera
fonte
1

Tive o mesmo problema em meu aplicativo Xamarin no Visual Studio e foi resolvido desconectando meu dispositivo móvel de teste. O aplicativo foi fechado e o depurador foi interrompido, mas o erro ainda ocorria ao tentar construir ou reconstruir a solução. Ele só parou depois que desliguei o dispositivo porque tive que receber uma chamada.

Tomislav3008
fonte
1

Só para jogar meus 2 centavos. Meu problema foi resolvido abrindo o Gerenciador de Tarefas e encerrando o aplicativo. Ele estava sendo executado em segundo plano, sem qualquer indicação de que estava em execução (nenhum item na barra de tarefas, sem interface do usuário, nada), mas não tenho certeza do motivo disso. Obviamente, o depurador não estava rodando e eu só tinha uma única instância do VS aberta no momento. Me surpreende que isso ainda esteja acontecendo neste VS 2017.

Talvez eu possa adicionar uma etapa de construção que procure o aplicativo em execução em segundo plano e o elimine antes de iniciar o novo.

Benjamin McGill
fonte
1

Tive o mesmo problema e não consegui retificá-lo usando nenhum dos métodos mencionados nas respostas anteriores. Resolvi o problema eliminando todas as instâncias de "SSIS Debug Hist (32 bits)" no gerenciador de tarefas e agora trabalhando normalmente.

BM
fonte
0

Como seu aplicativo da web está configurado? Ele é executado no Cassini (o servidor da Web da bandeja) ou IIS?

Isso não deve acontecer normalmente. Acho que o ProcessExplorer pode dizer quais arquivos um processo bloqueou. Se não for o explorador de processos, uma das outras ferramentas do Sysinternals.

Uma coisa a tentar antes mesmo de baixar uma das ferramentas SI é parar o servidor web Cassini e ver se isso libera o arquivo.

Andy
fonte
Não é um aplicativo da web; são winforms.
Shaul Behr
3
Ah, então você pode querer editar sua pergunta ao começar com "Eu tenho um aplicativo de webforms em C # ..."
Andy,
0

O que funcionou para mim foi reiniciar o IIS

Beanwah
fonte
0

Eu tive esse mesmo problema também. alterar a configuração de depuração / liberação não funcionou. pelo menos não sem construir no meio.

na minha solução (winform) foi resolvido abrindo o mainform do winform no designer. mudar para o código (F7). Em seguida, feche o código, feche o designer do winform e reconstrua tudo (ctrl-shift-B). Isso funcionou para mim.

parece que algum tipo de identificador de dentro do aplicativo winform (que executa um backgroundworker) ainda tinha um identificador de arquivo em algumas das outras bibliotecas usadas.

Obelix
fonte
0

Eu tive duas instâncias do Visual Studio abrindo a mesma solução.

Janis S.
fonte
0

No meu caso, havia alguns processos vstest em execução (com vários nomes, mas todos contendo a string vstest). Eu tive que encerrá-los no taskmgr.

JT
fonte
0

Mesmo erro, resolvido atualizando os pacotes de suporte do Google Nuget

Gustavo Baiocchi Costa
fonte
0

Quando encerrei o processo .Net Core Host, tudo começou bem. Não precisei fechar o Visual Studio ou fazer qualquer outra alteração.

slimeygecko
fonte
0

Para quem está desenvolvendo no VS com Docker, reinicie o docker do serviço windows e o problema será resolvido imediatamente.

Antes de reiniciar o docker tentei todas as respostas mencionadas, não encontrei um processo msbuild.exe em execução, também tentei reiniciar o VS sem sucesso, apenas reiniciar o docker funcionou.

Carlos
fonte
0

Mais uma solução: quando os arquivos são bloqueados, o processo de bloqueio é relatado (algo como "ServiceHub.Host.CLR.x64 (7764)") com seu id entre parênteses. Para se livrar do processo, abra o PowerShell (x + Win + I) e digite: "Stop-Process -Id idNumber".

TripleAccretion
fonte
0

Recentemente, encontrei o problema ao implantar no Service Fabric. O erro indica que um 'arquivo' está em uso, no entanto, descobri que a porta estava sendo usada por outro IDE. Ao interromper um serviço em execução que já estava hospedando na porta, consegui impedir que essa exceção ocorresse.

osoclever
fonte
0

Eu havia enfrentado o mesmo problema. Tentei várias soluções listadas acima, mas não funcionaram para mim.

Resolvi esse problema fechando a conexão do Server Explorer e fechei todas as guias que estavam abertas no Visual Studio.

Jayesh Baviskar
fonte
0

Se este for um projeto SSIS, abra o gerenciador de tarefas e elimine todas as instâncias de DtsDebugHost.exe, que deve liberar os arquivos bloqueados.

metabuddy
fonte
0

Eu uso o Visual Studio Code e recebi este erro porque o servidor de desenvolvimento estava em execução (executei o servidor de desenvolvimento pressionando Ctrl + F5).

Assim, apenas cliquei no sinal de stop para parar e o erro foi embora.

Seif
fonte
0

Eu tive esse problema (e é um problema que tenho visto em outros lugares, não apenas no VS).

É causado pelo Dropbox (no meu caso). Depois de editar algum código e clicar em executar, às vezes o dropbox bloqueia imediatamente o arquivo (para que possa processá-lo).

Solução 1. Basta clicar em executar novamente

Solução 2. Pause a caixa de depósito. (não é bom se você estiver usando a caixa de depósito como backup na nuvem)

Solução 3. Remova a pasta de construção da lista de sincronização das caixas de depósito.

KevinLeeSmith
fonte
0

Excluir Obj, varejo e pasta de depuração do projeto .NET e reconstruir novamente funcionou para mim.

Siddhant Gupta
fonte