Сбой сборки Visual Studio: невозможно скопировать exe-файл из obj \ debug в bin \ debug - PullRequest
189 голосов
/ 24 мая 2010

Обновление: Пример проекта, воспроизводящего эту ошибку, можно найти здесь, в 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, которая блокирует файл.

Ответы [ 35 ]

0 голосов
/ 04 ноября 2016

[решено] Невозможно скопировать exe-файл из obj \ debug в bin \ debug:

Я подхожу к тому, что вы получаете эту ошибку, когда пытаетесь запустить два окна формы одно за другим, например сначала загружать форму, а затем иногда она автоматически исчезает и вторая форма загружается на экран.

По сути, вам нужно закрыть первую форму, которая работает в фоновом режиме, и основной причиной этой ошибки.

Чтобы закрыть первую форму, вы должны добавить эти две строки кода во второй обработчик события загрузки формы.

        Form1 form = new Form1();
        form.Close();

Это прекрасно решит ошибку.

0 голосов
/ 04 ноября 2013

Когда я столкнулся с подобной проблемой, единственное, что, казалось, работало, было:

  • Щелкните правой кнопкой мыши по проекту, перейдите в «Настройки» и убедитесь, что сборки «Отладка» и «Выпуск» ориентированы на одни и те же настройки или содержат настройки, которые приложение пытается загрузить или сохранить.
  • Удаление папки C: \ Users (YourUserAccount) \ AppData \ Local (YourAppName).
  • Убедиться, что все файлы, которые у меня там были, не считаются заблокированными. Щелкнув правой кнопкой мыши на включенных файлах моего проекта, я понял, что один значок был фактически заблокирован и считался плохим, потому что он был загружен из Интернета. Мне пришлось нажать кнопку «Разблокировать» (например, проверьте это: http://devierkoeden.com/Images/Articles/Dynamicweb/CustomModules/Part1/BlockedFiles.png - «Этот файл был получен с другого компьютера и может быть заблокирован для защиты этого компьютера».)
0 голосов
/ 31 октября 2017

Повторное включение службы Application Experience в Windows устранило такие проблемы для меня.

См. Следующие ссылки:

У меня былпроблема при использовании Visual Studio 2008, 2010 и 2013 с 64-разрядной версией Windows 7.

0 голосов
/ 30 ноября 2017

В случае, если кто-то сталкивается с этим при попытке отладить юнит-тест или запустить юнит-тест, мне пришлось убить следующие два процесса, чтобы он освободил файл:

processes to kill.

0 голосов
/ 08 января 2014

Для служб Windows, использующих WCF, я завершил хост-процесс WFC, и он заработал.Ненавижу, когда это происходит, и иногда это происходит случайно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...