Обновление: пример проекта, воспроизводящего эту ошибку, можно найти здесь, в Microsoft Connect . Я также проверил и подтвердил, что решение, указанное в принятом ниже ответе, работает с этим образцом проекта. Если это решение не работает для вас, вероятно, у вас другая проблема (которая относится к отдельному вопросу).
Это вопрос, который задавали раньше, как здесь, в Stack Overflow, так и в других местах, но ни одно из предложений, которые я нашел до сих пор, мне не помогло, поэтому мне просто нужно попробовать задать новый вопрос.
Сценарий: у меня есть простое приложение Windows Forms (C #, .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 , что блокировка файла.