Обновление: Пример проекта, воспроизводящего эту ошибку, можно найти здесь, в Microsoft Connect. Я также проверил и подтвердил, что решение, приведенное в принятом ответе ниже, работает с этим примером проекта. Если это решение не работает для вас, возможно, у вас другая проблема (которая относится к отдельному вопросу).
Этот вопрос задавался ранее, как здесь, в Кару, так и в других местах, но ни одно из предложений, которые я нашел так далеко, не помогло мне, поэтому я просто должен попытаться задать новый вопрос.
Сценарий: у меня есть простое приложение Windows Forms (С#,.NET 4.0, Visual Studio 2010). Он имеет несколько базовых форм, от которых наследуется большинство других форм, он использует Entity Framework (и классы POCO) для доступа к базе данных. Ничего особенного, нет многопоточности или чего-то еще.
Проблема: все было хорошо некоторое время. Затем совершенно неожиданно Visual Studio не удалось собрать, когда я собирался запустить приложение. Я получил предупреждение "Невозможно удалить файл '... bin\Debug\[ProjectName].exe'. Доступ к пути '... bin\Debug\[ProjectName].exe' запрещен". " и ошибка "Невозможно скопировать файл" obj\x86\Debug\[ProjectName].exe "в" bin\Debug\[ProjectName].exe ". Процесс не может получить доступ к файлу" bin\Debug\[ProjectName].exe " потому что он используется другим процессом ". (Я получаю и предупреждение, и ошибку при запуске Rebuild, но только ошибку при запуске Build - не думаю, что это актуально?)
Я прекрасно понимаю, что говорится в предупреждении и сообщении об ошибке: Visual Studio, очевидно, пытается перезаписать exe файл, хотя в то же время он по какой-то причине заблокирован. Тем не менее, это не помогает мне найти решение проблемы... Единственное, что я нашел в работе, - это закрыть Visual Studio и запустить его заново. Затем работает сборка и запуск, пока я не внесу изменения в некоторые формы, затем у меня снова возникнет та же проблема, и мне придется перезагрузить компьютер... Довольно разочаровывает!
Как я упоминал выше, это, кажется, известная проблема, поэтому есть много предложенных решений. Я просто перечислю то, что я уже пробовал здесь, чтобы люди знали, что пропустить:
- Создайте новое чистое решение и просто скопируйте файлы из старого решения.
Добавление следующего к следующему событию предварительной сборки проекта:
if exist "$(TargetPath).locked" del "$(TargetPath).locked" if not exist "$(TargetPath).locked" if exist "$(TargetPath)" move "$(TargetPath)" "$(TargetPath).locked"
Добавление следующего в свойства проекта (файл .csproj):
<GenerateResourceNeverLockTypeAssemblies>true</GenerateResourceNeverLockTypeAssemblies>
Тем не менее, ни один из них не работал для меня, так что вы можете понять, почему я начинаю немного расстраиваться. Я не знаю, где еще искать, поэтому я надеюсь, что кому-то есть, что мне дать! Это ошибка в VS, и если да, то есть ли патч? Или я сделал что-то не так, есть ли у меня круговая ссылка или что-то подобное, и если да, то как я могу узнать?
Любые предложения высоко ценятся :)
Обновление: Как упоминалось в комментарии ниже, я также проверил с помощью Process Explorer, что это на самом деле Visual Studio, которая блокирует файл.