Visual Studio “Não foi possível copiar”… durante a compilação


347

Eu continuo recebendo esse erro durante a compilação do meu projeto C # do VS2012

Error   41  Could not copy "obj\Debug\WeinGartner.WeinCad.exe" to
 "bin\Debug\WeinGartner.WeinCad.exe". 
 Exceeded retry count of 10. Failed.    


Error   42  Unable to copy file "obj\Debug\WeinGartner.WeinCad.exe" to
"bin\Debug\WeinGartner.WeinCad.exe". The process cannot access the file
'bin\Debug\WeinGartner.WeinCad.exe' because it is being used by another 
process.    

Agora eu descobri que matar o processo

Weingartner.WeinCad.vhost.exe

funciona (às vezes), mas isso está me dando nos nervos. Alguma maneira de impedir que isso aconteça?

Minhas configurações do depurador são

insira a descrição da imagem aqui insira a descrição da imagem aqui


Para mim, foi causado pelo .exe iniciado manualmente no diretório Release. O problema era que o VS não pode copiar sobre um executável que ainda está em execução. Vou tentar consertá-lo com a limpeza adequada dos recursos, para que o programa não fique travado após o botão fechar da janela.
#

Há um resumo bem deste problema com os passos típicos para resolver em esta pergunta
LightCC

Isso estava acontecendo para mim porque o Windows Defender decidiu que não gostava mais do .exe do projeto VS2019 no qual estou trabalhando. Estou trabalhando nisso há semanas sem problemas, mas hoje, acho que uma nova atualização não gostou. Tive que excluir minhas pastas de origem. Parou de acontecer.
IronRod 30/01

Respostas:


401

Encontrei mensagens de erro semelhantes no Visual Studio 2013.

Principalmente, descobri que essa situação ocorreu quando um processo de depuração foi interrompido devido a uma exceção.

Quando o clean + build não resolveu esse problema para mim, tive êxito fazendo o seguinte:

  • Fechando o Visual Studio
  • Excluindo o bine objpastas, e
  • Reabrindo o Visual Studio.

Este "bug" existe desde o Visual Studio 2003.

Por fim, também descobri que geralmente posso superar esse problema simplesmente renomeando o arquivo executável e excluindo-o.


8
O mesmo aqui, VS2013. Sair, excluir artefatos de construção, reiniciar -> tudo de bom.
Cacau

49
eu tenho o mesmo problema, mas depois de reiniciar VS eu recebo uma compilação e os arquivos ficam trancados novamente ..
o Sonic Alma

54
Esta não é uma solução, na melhor das hipóteses, uma solução parcial. Eu não quero reiniciar o VS a cada 10 minutos. Limpar a solução funciona para mim, mas limpá-la a cada 10 minutos também não é uma solução.
Legends

7
Pela minha experiência, o VS2013 faz isso pelo menos 10 vezes por dia para mim, independentemente da máquina em que estou desenvolvendo. É como se o bug piorasse. Apenas sayin
AR

28
bug ainda existem em VS 2019.
Akash KC

107

No Visual Studio Premium 2013 (Atualização 3), eu resolvi isso com um alinhamento pré-compilado:

(if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb)

Isso exclui normalmente quaisquer arquivos PDB antigos (se possível) e renomeia qualquer coisa que resta com uma .old.pdbextensão. Um bom efeito colateral é que, se o PDB antigo ainda estiver bloqueado, ele adicionará outra peça .old ao nome do arquivo e todos serão limpos na próxima vez que você reiniciar o Visual Studio e criar uma compilação.

Por exemplo, a sessão de compilação / depuração 1 deixa MyProject.pdbbloqueada.
Na próxima vez que você criar:
MyProject.pdb->MyProject.old.pdb

Em seguida, a sessão build / debug 2 é iniciado, e tanto MyProject.pdb e MyProject.old.pdbainda estão bloqueados:
MyProject.old.pdb-> MyProject.old.old.pdb
MyProject.pdb->MyProject.old.pdb

Finalmente, reiniciar o Visual Studio e fazer uma nova compilação se livrará de ambos e continuará o processo normalmente.


5
O mesmo no VS2010, VS 2012
Boogier

7
Obrigado, funcionou perfeitamente para mim, modificando seu exemplo para usar arquivos exe. Acho que isso pode ser um bug no último CTP do VS 2015 também.
Johny Skovdal

Que bom que ajudou - eu ainda tenho meu comando de pré-compilação configurado e funciona bem o suficiente para que eu esqueci que estava lá!
Geoff

3
Eu odeio ter que fazer isso no diretor, mas funciona, então é isso! :) Obrigado por compartilhar esta pérola, Geoff!
kayleeFrye_onDeck

11
Mais recente (11/03/2018) Visual Studio 2017 v15.6.1: ainda é um problema. Depuração, exceção, assemblies no diretório de destino bloqueados. A solução acima com * .pdb alterada para * .dll ainda se aplica.
Michiel de Wolde

71

É porque você fechou seu aplicativo, mas ele ainda está sendo executado em segundo plano.

Solução temporária:

  • Vá para o Gerenciador de tarefas ( Ctrl+ Alt+ Esc).
  • Vá para a guia Processos e encontre "YourProjectName.exe".
  • Marque "Mostrar processos de todos os usuários" se você não encontrar o seu processo.
  • Finalize processá-lo.

Solução permanente: você precisa fechar seu aplicativo através de codificação. Aqui está o código ...

System.Windows.Forms.Application.Exit();

Você precisa colocar esse código no evento de fechamento do formulário em todos os formulários. Exemplo:

private void frm_menu_FormClosing(object sender, FormClosingEventArgs e)
{
    System.Windows.Forms.Application.Exit();
}

11
Era exatamente isso. O Visual Studio travou e o IIS Express ainda estava em execução (no meu caso). Tudo o que eu precisava fazer era abrir a barra de tarefas, clicar com o botão direito do mouse no ícone do IIS Express e sair. Obrigado.
the-nick-wilson

Isso funcionou para mim; Não pude excluir as pastas obj e bin porque outro processo as estava usando. Felizmente, o Windows 10 realmente disse qual era o nome dele; uma vez que foi fechado no Gerenciador de Tarefas dos problemas foi embora
Novastorm

25

o .vhost.exe é um processo de depurador, portanto, parece que o processo que está sendo depurado não foi fechado corretamente. Provavelmente, você tem um bug que o mantém vivo e não está interrompendo o processo de depuração corretamente - há opções para desanexar do processo quando você clica em 'parar a depuração' em vez de realmente matar o depurador, então talvez você tenha esse conjunto.

Mas esse é o problema - o arquivo que você está tentando copiar está bloqueado (ou seja, ainda está sendo usado) pelo sistema operacional, impedindo a cópia. Verifique se o arquivo está livre e você poderá copiar.


Adicionei minhas opções de depurador às perguntas. Tenho certeza de que deveria estar matando o processo, mas talvez eu não entenda algumas opções.
Bradgonesurfing

Em Visual Studio 2019, estou recebendo uma mensagem semelhante, embora agora mencione o processo em alguns dos resultados (não em todos). Foi testhost.x86.exe que eu tive que matar via Task Manager. Depois disso, pareceu parar de detectar um dos processos de teste.
Andez


20

Você deve desativar o seu antivírus (principalmente se for um Avast) e tentar novamente. Isso me ajudou. O problema é que o depurador / construtor cria o arquivo .exe que é identificado como uma ameaça pelo Avast e, portanto, excluído antes de poder ser executado pelo VS.


Boa pegada. Eu sempre odeio o Avast.
stackunderflow

O Avast também foi o problema para mim. Desativar o escudo do sistema de arquivos foi a resposta. Tentei adicionar minha pasta Visual Studio \ Projects às Exclusões, mas isso não funcionou.
KeithB

11
Eu tenho o mesmo problema com a proteção do Symantec Endpoint. Alguém no departamento de TI aumentou bastante o nível de segurança :-) Obrigado Pitrs.
ssimm

Acrescentarei que você pode criar uma exceção para o diretório obj \ Debug para uso conveniente, em vez de desativar o AV ou uma de suas ferramentas de proteção.
A.Kali

Obrigado! Eu achei que era um MalwareBytes bloqueando meu arquivo .exe.
NL3294

15

Consegui corrigir esse problema (VS 2010) fornecendo as seguintes ações pré-compilação;

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

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

11
@luckyluke, Nas propriedades do seu projeto, há uma seção onde você pode adicionar um script pré-Build. Copie e cole o script acima nessa área designada e reconstrua o projeto / execute seu aplicativo
Nair

13

Citar:

Uma solução alternativa é colocá-lo na propriedade da linha de comandos do evento Pré-compilação do> projeto (Na guia Eventos da compilação):

Fragmento de código

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

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

8

Exceção

Em alguns casos, no Visual Studio, quando você (Build || Rebuild), além de executar o IISExpress, se depara com esta exceção:

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

Solução

  1. Clique com o botão direito do mouse no projeto da web que precisa ser construído.
  2. Clique nas propriedades.
  3. Selecione a guia Build Events no lado esquerdo.
  4. Na linha de comando Eventos de pré-construção, cole estas 2 linhas:
tasklist /fi "imagename eq iisexpress.exe" |find ":" > nul
if errorlevel 1 taskkill /f /im "iisexpress.exe"

Você é bom 2 GO!


6

Parece que, alterando o nome da montagem de um projeto, o problema é corrigido.

Então, ao invés disso

insira a descrição da imagem aqui

Eu mudo para isso

insira a descrição da imagem aqui

Observe que eu mudei de Increment and Recallpara Increment_Recall, apenas removi os espaços. Agora está funcionando bem para mim.


Ótimo resolveu meu problema.Obrigado !!
Kiran Joshi

6

Matar o processo w3wp.exe (IIS) geralmente resolve isso.
Geralmente, você pode conhecer o processo que possui o bloqueio no arquivo, navegando até a pasta bin e tentando excluí-lo. A mensagem de erro que será exibida, caso outro processo esteja sendo usado, conterá o nome do processo que precisa ser eliminado.


4

Eu enfrentei o mesmo problema no VS 2012 versão 11.0.60610.01, atualização 3 no Windows 8

Não havia janelas de designer abertas e o projeto era um aplicativo de console simples.

A remoção do processo vshost que acessa o arquivo não funciona na maioria das vezes, pois o processo não está acessando o arquivo.

A solução mais simples que funciona e leva menos tempo é remover o projeto da solução, criar outro projeto na solução e adicionar o original de volta.

É irritante e perda de tempo, mas é a menos dispendiosa de todas as outras opções que conheço.

Espero que isto ajude...


Tudo o que você precisa fazer é Reconstruir tudo e tudo ficará bem por mais 10 tentativas. Não é um grande inconveniente.
Scott Shaw-Smith

@ Scott Shaw-Smith Não funciona para mim. E com base em alguns dos outros comentários que já vi, também não funciona para outros. No meu caso, a desinstalação do Avast o corrigiu.
User316117

4

Eu acho que resolvi removendo a marca de seleção Break all processes when one process breaksnas opções de depuração (primeira captura de tela do op-> segunda opção).
Ele está construindo / funcionando bem há um tempo desde que eu o desmarquei.
Estou usando o MySql NET Connector e os controles DevExpress no meu projeto. Pode ser que um deles não esteja descartando conexões, ligações, etc., devido a esse sinalizador estar ativado.

EDITADO: definitivamente funciona! Não é mais possível "Não é possível copiar o arquivo" e não há mais erros de designer de formulários.


11
Nenhuma das outras soluções funcionou para mim. Este é o único. Estou usando o Visual Studio 2017 13.2
xleon 16/05

11
Acabei de testar no VS2019, não funciona para mim
0xBADF00D 15/01

4

Adicione um evento de pré-construção do seu taskkill do projeto principal / f / fi "pid gt 0" / im "YourProcess.vshost.exe"


Não gosto muito de resolver o problema dessa maneira, mas funcionou!
precisa

Eu achei a solução de trabalho mais simples para o problema.
dscharge

4

Minha contribuição de 10 centavos.

Ocasionalmente ainda tenho esse problema no VS 2015 Update 2.

Eu descobri que mudar o destino da compilação resolve o problema.

Tente o seguinte: se você estiver no DEBUG, alterne para RELEASE e compile e volte para DEBUG. O problema se foi.

Stefano


sim! É isso aí. Esta é uma solução simples para este problema irritante! Totalmente funcionou para mim. Fácil e rápido! Muito obrigado.
Meister Schnitzel

11
Funciona para mim! Dica: Com a Depuração desativada >> Opções >> Depuração >> Geral >> "Usar modo de compatibilidade gerenciada", a solução alternativa não é necessária!
Leon22

4

Siga os passos abaixo

  1. Abra o Gerenciador de tarefas (Ctrl + Alt + Delete)
  2. Na guia Desempenho, selecione < ProjectNameOfYours.exe >.
  3. Clique em Finalizar processo.
  4. Agora crie a solução.

As etapas acima resolveram o erro permanentemente :)


3

Se nenhuma das respostas funcionar, tente esta verificação simples. Encontre qualquer arquivo MSbuild.exe executando e mantendo o EXE do seu projeto. Mate o MSBuild.exe e você deve estar pronto.


2

Não posso fornecer uma solução para impedir que isso aconteça, mas você pode pelo menos Renomear o arquivo bloqueado (windows explorer ou janela de comando clássica) e compilar / compilar. Não há necessidade de reiniciar ou reiniciar o VS201x. Com alguma experiência, você pode adicionar um script de pré-compilação para excluir arquivos antigos ou renomear e, em seguida, fora do caminho, caso haja um bloqueio.


2

Veja esta outra resposta . Basicamente, você pode ter os processos MSBuild.exe em execução em segundo plano, consumindo arquivos de recursos. Se você tiver alguma tarefa de pré ou pós-compilação que faça com que um MSBuild seja iniciado via linha de comando, tente adicionar o sinalizador "/ nr: false" a este comando. Mais uma vez, consulte a resposta anterior para obter detalhes mais específicos.


Snap, eu tenho o mesmo problema na atualização 2 do VS2015 - MSBuild, o processo exe precisa ser eliminado no TaskManager antes que eu possa reconstruir.
Nick Wright

O link do artigo na resposta de Josh acima sugere o uso de uma variável de ambiente do sistema para desativar a reutilização do nó no Visual Studio e no processo MSBuild (MSBUILDDISABLENODEREUSE = 1) - isso funcionou para mim.
Nick Wright

2

Eu finalmente como consertá-lo. Por que não podemos continuar a depuração após a primeira depuração porque o primeiro exe de depuração ainda está em execução. Para que, após a primeira depuração, você precise ir para o Gerenciador de Tarefas -> Guia Processo -> [nome do seu projeto exe] e encerre o processo exe.

funciona para mim :)


Uau, obrigado cara, exatamente o meu problema. Como ele pede a senha do usuário para mim durante a execução do exe, pela primeira vez não foi acionado. Quando tento excluir esse aplicativo na lista de processos e depurar novamente, ele funcionou perfeitamente.
Chandraprakash

2

A resposta de @ Geoff ( https://stackoverflow.com/a/25251766/3739540 ) é boa, mas gera o código de erro 1 ao recompilar.

Aqui está o que funcionou para mim (2> nul 1> nul no final + saída 0):

(if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb) 2>nul 1>nul
(if exist "$(TargetDir)*old.dll" del "$(TargetDir)*old.dll") & (if exist "$(TargetDir)*.dll" ren "$(TargetDir)*.dll" *.old.dll) 2>nul 1>nul
exit 0

2

Se você estiver depurando modelos T4 , isso acontece o tempo todo. Minha solução (antes que a MS corrija isso) seria apenas matar esse processo:

Gerenciador de Tarefas -> Usuário -> T4VSHostProcess.exe

Esse processo ocorre apenas quando você depura um modelo T4, não quando você executa um.


2

Aqui está um script para se livrar definitivamente desse problema:

REM   This script is invoked before compiling an assembly, and if the target file exist, it moves it to a temporary location
REM   The file-move works even if the existing assembly file is currently locked-by/in-use-in any process.
REM   This way we can be sure that the compilation won't end up claiming the assembly cannot be erased!

echo PreBuildEvents 
echo  $(TargetPath) is %1
echo  $(TargetFileName) is %2 
echo  $(TargetDir) is %3   
echo  $(TargetName) is %4

set dir=C:\temp\LockedAssemblies

if not exist %dir% (mkdir %dir%)

REM   delete all assemblies moved not really locked by a process
del "%dir%\*" /q

REM   assembly file (.exe / .dll) - .pdb file and eventually .xml file (documentation) are concerned
REM   use %random% to let coexists several process that hold several versions of locked assemblies
if exist "%1"  move "%1" "%dir%\%2.locked.%random%"
if exist "%3%4.pdb" move "%3%4.pdb" "%dir%\%4.pdb.locked%random%"
if exist "%3%4.xml.locked" del "%dir%\%4.xml.locked%random%"

REM Code with Macros
REM   if exist "$(TargetPath)"  move "$(TargetPath)" "C:\temp\LockedAssemblies\$(TargetFileName).locked.%random%"
REM   if exist "$(TargetDir)$(TargetName).pdb" move "C:\temp\LockedAssemblies\$(TargetName).pdb" "$(TargetDir)$(TargetName).pdb.locked%random%"
REM   if exist "$(TargetDir)$(TargetName).xml.locked" del "C:\temp\LockedAssemblies\$(TargetName).xml.locked%random%"

REM PreBuildEvent code
REM   $(SolutionDir)\BuildProcess\PreBuildEvents.bat  "$(TargetPath)"  "$(TargetFileName)"  "$(TargetDir)"  "$(TargetName)"

REM References:
REM   http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx
REM   http://stackoverflow.com/a/2738456/27194
REM   http://stackoverflow.com/a/35800302/27194

O script precisa ser chamado de cada evento de pré-construção do projeto VS.

$(SolutionDir)\BuildProcess\PreBuildEvents.bat  "$(TargetPath)"  "$(TargetFileName)"  "$(TargetDir)"  "$(TargetName)"

insira a descrição da imagem aqui


2
  1. Abrir propriedades do projeto [menu> projeto> propriedades]
  2. Escolha a aba "debug"
  3. Desmarque a opção "Ativar o processo de hospedagem do visual studio"
  4. Iniciar depuração [F5]
  5. Você receberá um aviso de segurança, apenas "ok". Permite que o aplicativo seja executado
  6. Pare de depurar.
  7. Marque a opção "Ativar o processo de hospedagem do visual studio", na guia depuração,
  8. Agora, tente iniciar a depuração, você não verá o erro novamente

[Trabalhe para mim]


Por que isso foi em -2? Funcionou para mim também. Não faz sentido, mas, se funciona, funciona.
Wakka02

Esta é uma solução permanente? ou seja, você precisa executar essas 8 etapas todas as vezes?
Arthur Swails

não vs17 não tem a opção processo de hospedagem
John Demetriou

1

Esta pergunta foi o primeiro resultado ao procurar o seguinte erro:

Não foi possível copiar o arquivo "..." porque não foi encontrado.

ao criar no Visual Studio 2013 (atualização 3).

Solução: Desinstalando o "Productivity Power Tools" no Visual Studio 2013.

https://connect.microsoft.com/VisualStudio/feedback/details/533411


Obtendo esse erro várias vezes na construção do projeto herdado do TFS. Pensei que fosse isso! Pesquisou isso em programas instalados e suplementos. Não foi possível encontrar este aplicativo de ferramentas elétricas. Onde isso se esconderia?
Taersious 17/06/19

1

No meu caso, era o corredor Resharper Unit Tests (mais testes NUnit, nunca tive esse problema com MsTests). Depois de matar o processo, foi possível reconstruir o processo, sem reiniciar o SO ou o VS2013


Sim, procureJetBrains.Resharper.TaskRunner.*
Dunc

1

Eu não sabia que ainda tinha meu depurador conectado e estava tentando criar a mesma instância do Visual Studio. Depois que parei o depurador, consegui construir.


1

Matar o (s) processo (s) vstest.executionengine.exe resolve esse problema 90% do tempo para mim. Se isso não funcionar, também mata o QTAgent32.exe e exclui as pastas / bin e / obj do projeto em questão.

Esta é a parte mais irritante do meu dia de trabalho. :)


1

Para mim, foi o antivírus Avast que não deixou o visual studio gravar / ler / executar arquivos. Então eu tive que adicionar a pasta Visual studio 2010/2012 à lista de exclusão de antivírus. E logo após aquele baam ... funciona.


1

Certifique-se de fechar todas as instâncias wcfSvcHost e tente novamente. Funcionou para mim!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.