Обновление: Пример проекта, воспроизводящего эту ошибку, можно найти здесь, в Microsoft Connect . Я также проверил и подтвердил, что решение, приведенное в принятый ответ ниже , работает с этим примером проекта. Если это решение не работает для вас, возможно, у вас другая проблема (которая относится к отдельному вопросу).
Этот вопрос задавался ранее, как здесь, в Переполнении стека, так и в других местах, но ни одно из предложенных мною предложений не помогло мне, поэтому я просто должен попытаться задать новый вопрос.
Сценарий: у меня есть простое приложение Windows Forms (C #, .NET 4.0, Visual Studio 2010). Он имеет несколько базовых форм, от которых наследуется большинство других форм, он использует Entity Framework (и классы POCO) для доступа к базе данных. Ничего особенного, нет многопоточности или чего-то еще.
Проблема: некоторое время все было хорошо. Затем совершенно неожиданно Visual Studio не удалось собрать, когда я собирался запустить приложение. Я получил предупреждение "Невозможно удалить файл '... bin \ Debug \ [ProjectName] .exe'. Доступ к пути '... bin \ Debug \ [ProjectName] .exe' запрещен." * " 1019 * и ошибка "Невозможно скопировать файл '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, которая блокирует файл.