[c#] Visual Studio «Не удалось скопировать» ... во время сборки



Answers

В Visual Studio Premium 2013 (обновление 3) я решил это с помощью встроенного однострочного интерфейса:

(if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb)

Это изящно удаляет любые старые файлы PDB (если возможно), а затем переименовывает все, что осталось с расширением .old.pdb . Хорошим побочным эффектом является то, что если старый PDB все еще заблокирован, он просто добавляет еще одну .old часть в имя файла, и все они будут очищены в следующий раз, когда вы перезапустите Visual Studio и выполните сборку.

Например, сборка / отладка сеанса 1 оставляет MyProject.pdb заблокированным.
В следующий раз, когда вы создадите:
MyProject.pdb -> MyProject.old.pdb

Затем запускается сборка / отладка сеанса 2, и оба MyProject.pdb и MyProject.old.pdb по-прежнему заблокированы:
MyProject.old.pdb -> MyProject.old.old.pdb
MyProject.pdb -> MyProject.old.pdb

Наконец, перезапуск Visual Studio и создание новой сборки избавятся от обоих из них и продолжат процесс, как обычно.

Question

Я продолжаю получать эту ошибку во время сборки моего проекта VS2012 C #

Error   41  Could not copy "obj\Debug\WeinGartner.WeinCad.exe" to
 "bin\Debug\WeinGartner.WeinCad.exe". 
 Exceeded retry count of 10. Failed.    


Error   42  Unable to copy file "obj\Debug\WeinGartner.WeinCad.exe" to
"bin\Debug\WeinGartner.WeinCad.exe". The process cannot access the file
'bin\Debug\WeinGartner.WeinCad.exe' because it is being used by another 
process.    

Теперь я понял, что убийство процесса

Weingartner.WeinCad.vhost.exe

работает (иногда), но это нервничает. Любой способ остановить это вообще?

Настройки моего отладчика




Я не могу дать решение, чтобы предотвратить это, но вы можете хотя бы RENAME заблокированный файл (Windows Explorer или классическое командное окно), а затем компилировать / строить. Не нужно перезагружать или перезапускать VS201x. С некоторым опытом вы можете добавить скрипт предварительной сборки для удаления старых файлов или переименования, а затем вне зависимости от того, есть ли блокировка.




@ Ответ Джеффа ( https://.com/a/25251766/3739540 ) хорош, но он пересказывает код ошибки 1 при перекомпиляции.

Вот что сработало для меня (2> nul 1> nul на конце + выход 0):

(if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb) 2>nul 1>nul
(if exist "$(TargetDir)*old.dll" del "$(TargetDir)*old.dll") & (if exist "$(TargetDir)*.dll" ren "$(TargetDir)*.dll" *.old.dll) 2>nul 1>nul
exit 0



исключение

В некоторых случаях в Visual Studio, когда вы (Build || Rebuild) поверх запуска IISExpress вы столкнулись с этим Исключением:

Не удалось скопировать файл «obj \ Debug \ YourProjectName.dll» в bin \ YourProjectName.dll. Процесс не может получить доступ к файлу 'bin \ YourProjectName.dll', потому что он используется другим процессом

Решение

  1. Щелкните правой кнопкой мыши веб-проект, который нужно построить.
  2. Нажмите на свойства.
  3. Выберите вкладку «Сборка событий» на левой стороне.
  4. В командной строке Pre-build вставьте эти две строки:
tasklist /fi "imagename eq iisexpress.exe" |find ":" > nul
if errorlevel 1 taskkill /f /im "iisexpress.exe"

Вы хороши 2 GO!




Я решил это, убив IISExpress в диспетчере задач




В моем случае это был Resharper Unit Tests runner (плюс тесты NUnit, никогда не возникавшие проблемы с MsTests). После убийства процесса удалось восстановить процесс, не перезагружая ОС или VS2013




Убийство процесса vstest.executionengine.exe разрешает эту проблему в 90% случаев для меня. Если это не работает, то также убивает QTAgent32.exe, а затем удаляет папки / bin и / obj для проекта, о котором идет речь.

Это самая раздражающая часть моего рабочего дня. :)




Думаю, я решил удалить галочку, чтобы Break all processes when one process breaks на опции отладки (первый вариант снимка экрана -> второй).
Это было хорошо работает / работает хорошо, так как я снял флажок.
Я использую элементы MySql NET Connector и DevExpress в своем проекте. Возможно, один из них не располагал соединениями, привязками и т. Д., Потому что этот флаг активирован.

EDITED: определенно это работает! Нет больше «Не удалось скопировать файл» и больше ошибок конструктора форм.




Цитата:

Обходной путь заключается в том, чтобы поместить это в свойство командной строки события Pre-build проекта> project (на вкладке «События сборки»):

Фрагмент кода

if exist "$(TargetPath).locked" del "$(TargetPath).locked"

if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"



Я получаю это каждый раз, когда я развертываю, если я редактирую страницу Xaml на WP8 с помощью VS2012.

Мне нужно либо не открывать страницу Xaml, либо использовать проводник процессов, чтобы убить процесс XDesProc.exe.

Если вы получаете эту ошибку, я рекомендую использовать проводник процессов, чтобы увидеть, что происходит (даже если это другая проблема). Просто найдите процесс «WeinGartner.WeinCad.exe», и он должен показать процесс и обработать доступ к файлу (ну, по крайней мере, когда уничтожение vhost-файла не устраняет проблему).




Мой вклад в 10 центов.

У меня все еще есть эта проблема из-за обновления VS 2015 Update 2.

Я обнаружил, что задача коммутации компиляции решает проблему.

Попробуйте это: если вы находитесь в DEBUG, переключитесь на RELEASE и выполните сборку, затем вернитесь к DEBUG. Проблема ушла.

Стефано




Убедитесь, что вы закрыли все экземпляры wcfSvcHost и повторите попытку. Это сработало для меня!




Я наконец, как это исправить. Почему мы не можем продолжить отладку после первого отладки, потому что первый debug exe все еще работает. Чтобы после первого отладки вам нужно было перейти в диспетчер задач -> вкладка «Процесс» -> [название вашего проекта exe], завершите процесс exe.

меня устраивает :)




Добавить в событие предварительной сборки вашего главного проекта taskkill / f / fi "pid gt 0" / im "YourProcess.vshost.exe"




.vhost.exe - это процесс отладчика, поэтому кажется, что процесс, отлаживаемый, не закрывается должным образом. Скорее всего, у вас есть ошибка, которая поддерживает ее и не останавливает процесс отладки правильно - есть варианты отсоединения от процесса, когда вы нажимаете «остановить отладку» вместо фактического убийства отладчика, поэтому, возможно, у вас есть этот набор.

Но в этом проблема - файл, который вы пытаетесь скопировать, заблокирован (т. Е. Все еще используется) ОС, поэтому он предотвращает копирование. Убедитесь, что файл свободен, и вы сможете копировать.






Related