Visual Studio 2010: невозможно скопировать файл при отладке - PullRequest
6 голосов
/ 15 апреля 2011

У меня проблемы с какое-то время (так как я использую Visual Studio 2010, я думаю). Когда я пытаюсь запустить отладку в своем веб-приложении, я случайно получаю эту ошибку из среды VS.net:

Ошибка 1 Не удалось скопировать файл "obj \ Debug \ SolutionName.exe" в "bin \ Debug \ SolutionName.exe". Процесс не может получить доступ к файлу «bin \ Debug \ SolutionName.exe», так как он используется другим процессом.

Единственный способ избавиться от этой ошибки - это перезапустить Visual Studio (чтобы вскоре вернуть ошибку примерно в два раза в день).

После небольшого поиска в Интернете я обнаружил, что можно добавить предварительную сборку, отсюда MSDN Link

Все, что я нашел, - это записать что-то в событиях перед сборкой и выполнить некоторую обработку файла ... ну (это все равно не работает).

Вопрос 1: Есть ли более простой способ решить эту проблему (и навсегда!)
Вопрос 2: Какова точная причина этой проблемы?

1 Ответ

3 голосов
/ 15 апреля 2011

Это связано с теневым копированием.Вы можете отключить его следующим образом в web.config:

hostingEnvironment shadowCopyBinAssemblies="false"

Вы также можете использовать обходной путь, если вышеуказанные настройки вообще не работают с событием перед сборкой:

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

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

Вы можетевсегда используйте пользовательский пакетный скрипт для вызова по событию postbuild последнего проекта (согласно порядку сборки), который будет выполнять все операции копирования (которые я сейчас использую).

...