Atualização: Um exemplo de projeto que reproduz esse bug pode ser encontrado aqui no Microsoft Connect . Também testei e verifiquei que a solução dada na resposta aceita abaixo funciona nesse projeto de amostra. Se esta solução não funcionar, você provavelmente está tendo um problema diferente (que pertence a uma pergunta separada).
Essa é uma pergunta feita antes, tanto aqui no Stack Overflow quanto em outros lugares, mas nenhuma das sugestões que encontrei até agora me ajudou, então só tenho que tentar fazer uma nova pergunta.
Cenário: Eu tenho um aplicativo Windows Forms simples (C #, .NET 4.0, Visual Studio 2010). Ele possui alguns formulários básicos dos quais a maioria dos outros herdam, usa o Entity Framework (e as classes POCO) para acesso ao banco de dados. Nada extravagante, sem multi-threading ou qualquer coisa.
Problema: Tudo ficou bem por um tempo. Então, do nada, o Visual Studio falhou ao criar quando eu estava prestes a iniciar o aplicativo. Recebi o aviso "Não foi possível excluir o arquivo '... bin \ Debug \ [ProjectName] .exe'. O acesso ao caminho '... bin \ Debug \ [ProjectName] .exe' foi negado." e o erro "Não é possível copiar o arquivo 'obj \ x86 \ Debug \ [ProjectName] .exe' para 'bin \ Debug \ [ProjectName] .exe'. O processo não pode acessar o arquivo 'bin \ Debug \ [ProjectName] .exe 'porque está sendo usado por outro processo ". (Recebo o aviso e o erro ao executar o Rebuild, mas apenas o erro ao executar o Build - não acha isso relevante?)
Entendo perfeitamente bem o que diz a mensagem de aviso e erro: O Visual Studio está obviamente tentando substituir o arquivo exe enquanto, ao mesmo tempo, possui um bloqueio por algum motivo. No entanto, isso não me ajuda a encontrar uma solução para o problema ... A única coisa que encontrei funcionando é desligar o Visual Studio e iniciá-lo novamente. Construir e lançar funciona, até que eu faça uma alteração em alguns formulários, tenho o mesmo problema novamente e tenho que reiniciar ... Muito frustrante!
Como mencionei acima, esse parece ser um problema conhecido; portanto, existem muitas soluções sugeridas. Vou apenas listar o que já tentei aqui, para que as pessoas saibam o que pular:
- Criando uma nova solução limpa e copie os arquivos da solução antiga.
Adicionando o seguinte ao evento de pré-construção do projeto:
if exist "$(TargetPath).locked" del "$(TargetPath).locked" if not exist "$(TargetPath).locked" if exist "$(TargetPath)" move "$(TargetPath)" "$(TargetPath).locked"
Adicionando o seguinte às propriedades do projeto (arquivo .csproj):
<GenerateResourceNeverLockTypeAssemblies>true</GenerateResourceNeverLockTypeAssemblies>
No entanto, nenhum deles funcionou para mim, então você provavelmente pode ver por que estou começando a ficar um pouco frustrado. Não sei mais para onde procurar, então espero que alguém tenha algo a me dar! Isso é um bug no VS e, se houver, existe um patch? Ou fiz algo errado, tenho uma referência circular ou similar e, em caso afirmativo, como posso descobrir?
Todas as sugestões são muito apreciadas :)
Atualização: Como mencionado no comentário abaixo, também verifiquei, usando o Process Explorer, se realmente é o Visual Studio que está bloqueando o arquivo.