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

bradgonesurfing
fonte
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.

Gerard
fonte
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.

Geoff
fonte
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();
}
Rushi Daxini
fonte
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.

gbjbaanb
fonte
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
23

Eu o resolvi matando o IISExpress no gerenciador de tarefas

pat capozzi
fonte
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.

Pitrs
fonte
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"
Nair
fonte
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"
Zheng Qiang
fonte
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!

Xaimaran
fonte
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.

Cary Bondoc
fonte
Ó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.

Ogglas
fonte
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...

Ashwin J
fonte
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.

Ivan Ferrer Villa
fonte
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"

sofsntp
fonte
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

Stefano.net
fonte
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 :)

Akshay Bagi
fonte
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.

Cavalheiro
fonte
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.

hopperpl
fonte
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.

Josh Pavoncello
fonte
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 :)

chevhfghfghfgh
fonte
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
Michael Ribbons
fonte
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.

Pompair
fonte
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

Patrick da equipe NDepend
fonte
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]

Novpiar Effendi
fonte
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

despuestambien
fonte
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

Uriil
fonte
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.

Valamas
fonte
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. :)

dgundersen
fonte
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.

Alex
fonte
1

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

Jaguatirica
fonte