VS 2k8 не освобождает дескриптор файла после остановки отладки: невозможно скопировать файл X в выходной каталог, поскольку он используется другим процессом - PullRequest
6 голосов
/ 08 октября 2008

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

Ошибка 13 Невозможно скопировать файл [UI сборка] в [выходной каталог]. Процесс не может получить доступ к файлу [каталог вывода] [сборка интерфейса] потому что он используется другим процесс.

После перезапуска я получаю эту ошибку:

Ошибка 1 Файл метаданных [сборка служебной функции в папке RELEASE] не удалось быть найденным.

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

Я использую VS 2k8 SP1 в Windows Vista.

Я знаю, что это отладчик VS, который не выпускает свой дескриптор файла с помощью утилиты handle (ранее от Sysinternals). Процесс devenv.exe.

Я пытался закрыть и снова открыть решение. Не сработало Работает только полный перезапуск VS2k8.

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

Я даже пытался вручную закрыть дескриптор с помощью описанного выше утилиты handle.exe, а затем попытался выполнить событие перед сборкой. Visual Studio, очевидно, не знает, что ее дескриптор был закрыт из-за сбоя сборки VS, но handle.exe не показывает никаких дескрипторов открытых файлов для рассматриваемого файла.

Для справки, вот надстройки, которые я запускаю:

  • ReSharper 4
  • Смарт Пастер 2008
  • Typemock Isolator
  • TestDriven.NET 2.13.2184

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

Ответы [ 7 ]

2 голосов
/ 08 октября 2008

У меня были похожие проблемы в VS2005 и VS2008 без установленных надстроек или сторонних элементов управления в проекте. Единственное решение, которое я нашел, - закрыть Visual Studio и снова открыть его. Это очень непостоянная проблема, и, хотя она и раздражает, но, похоже, она не может быть решена с вашей стороны.

1 голос
/ 23 ноября 2010

запуск приложения Visual Studio в режиме совместимости с XP или Vista решил проблему в моей среде (win7 64bit).

1 голос
/ 15 февраля 2009

Вы можете попробовать этот сценарий событий перед сборкой:

если существует "$ (TargetPath) .locked" del "$ (TargetPath) .locked" если не существует "$ (TargetPath) .locked" переместить "$ (TargetPath)" "$ (TargetPath) .locked"

Некоторые люди сообщают, что это решает проблему.

UPDATE:

У вас случайно нет этого в вашем .config (или machine.config?):

<hostingEnvironment shadowCopyBinAssemblies="false"/>

Похоже, что это создаст (или, возможно, только усугубит) оригинал, "неспособный скопировать" во время проблемы сборки. Конечно, я добавил эту настройку в свой проект только потому, что при отладке обнаружил, что ASP.NET не может скрывать / копировать библиотеки DLL. Однако, задним числом, с этой проблемой справиться немного проще, чем с проблемой блокировки. Что касается проблемы с тенями и копиями, вам просто нужно собрать и подождать несколько секунд. Это немного раздражает, но, конечно, это меньше проблем, чем перезапуск Visual Studio каждый раз, когда вы хотите сделать сборку!

0 голосов
/ 15 мая 2009

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

Я нашел этот обходной путь через https://connect.microsoft.com/VisualStudio/feedback/Workaround.aspx?FeedbackID=114694. Опция сценария предварительной сборки работает, но только если сборка уже существует. Если вы выполните чистку / сборку, она не будет работать.

0 голосов
/ 16 января 2009

Я начал замечать, что, скорее всего, это происходит (и может быть, происходит) при выполнении метода, вызываемого во время Application.Idle.

0 голосов
/ 08 октября 2008

У нас была похожая проблема с VS2002 при создании наших проектов. Мы исправили это, когда перешли на VS2005, собрав наше приложение в общую папку сборки (т.е. {SolutionRoot} \ Build).

0 голосов
/ 08 октября 2008

Существует Unlocker инструмент, который может помочь вам в беде.

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