Visual Studio 2008 блокирует dll в папке bin и не отпускает ее - PullRequest
7 голосов
/ 22 июля 2009

Я работаю над решением, состоящим из 8 .NET проектов. Поскольку я практикую TDD, мне приходится очень часто перекомпилировать свое решение. В последнее время я получаю следующую ошибку примерно каждый раз при попытке компиляции:

Ошибка 2 Невозможно скопировать файл "obj \ Debug \ Zeiterfassung.Tests.dll" в "Bin \ Debug \ Zeiterfassung.Tests.dll". Процесс не может получить доступ к файлу 'Bin \ Debug \ Zeiterfassung.Tests.dll' потому что он используется другим процесс.

Zeiterfassung.Tests.dll - это dll, сгенерированная одним из моих проектов (это проект модульного тестирования). Это всегда эта dll, которая не может быть скопирована и вызывает ошибку. Все остальное работает нормально в 100% случаев.

Примерно в 9/10 раз я могу "решить" проблему, перекомпилировав свое решение снова. Но когда проблема становится действительно серьезной, проект просто не будет успешно компилироваться, независимо от того, как часто я пытаюсь перезапустить IDE.

Я использовал Microsoft.exe handle.exe, чтобы выяснить, какой процесс блокирует DLL, и это devenv.exe. Я также попытался удалить DLL вручную, и ее невозможно удалить, пока я не перезапущу IDE.

И последнее, но не менее важное: я попытался добавить <GenerateResourceNeverLockTypeAssemblies>true</GenerateResourceNeverLockTypeAssemblies> в свой проект, как это предлагалось на другом форуме, но это не помогло.

Пожалуйста, помогите! Эта проблема действительно начинает сводить меня с ума.

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

Ответы [ 7 ]

4 голосов
/ 22 июля 2009

Я сталкивался с той же проблемой раньше. Process Explorer может удалить дескриптор.

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

Это сработало для меня: 1) Создать новую папку вне проекта (c: \ Debug); 2) Щелкните правой кнопкой мыши ваш проект и выберите Свойства; 3) Найдите вкладку Build; 4) Перейдите в раздел «Вывод» на вкладке «Сборка» (последний в VS2010); 5) Нажмите кнопку «Обзор» и выберите новое местоположение c: \ Debug в качестве выходного каталога; 6) Сохранить все изменения; 7) Сборка (F6);

1 голос
/ 22 июля 2009

Наиболее вероятная проблема - проблема с многопоточностью. Вероятно, у вас был странствующий поток, который все еще выполняется, и он имеет ссылку на .DLL.

0 голосов
/ 24 мая 2013

У меня была похожая проблема . Я не знаю хорошего решения, но взломать, который решает проблему, это добавить событие перед сборкой, которое убивает vstest.executionengine.exe:

taskkill /F /IM vstest.executionengine.exe /FI "MEMUSAGE gt 1"
taskkill /F /IM vstest.executionengine.x86.exe /FI "MEMUSAGE gt 1"
0 голосов
/ 22 июля 2009

Похоже, ошибка исчезла (пальцы скрещены ...) после того, как я переместил свой тестовый проект, извлек более раннюю версию проекта из репозитория и заменил все файлы кода новыми версиями.

0 голосов
/ 22 июля 2009

Под " я попытался добавить true в свой проект, как это было предложено на другом форуме ". Вы имеете в виду, что вы создали свойство с именем GenerateResourceNeverLockTypeAssemblies и задали для него true как предложено в http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/6f76db9a-ea37-42b3-a016-571912c28032? Если нет, попробуйте.

Сайед Ибрагим Хашими

Моя книга: Внутри Microsoft Build Engine: Использование MSBuild и Team Foundation Build

0 голосов
/ 22 июля 2009

Visual Studio сталкивался с той или иной проблемой, подобной этой, начиная с первого дня. Было бы неплохо дать вам ряд простых решений, которые всегда работают, но, честно говоря, иногда они просто «споткнулись о свои ноги».

В этом случае простое решение состоит в том, чтобы выйти и перезапустить. Даже закрытие раствора и повторное открытие могут не помочь.

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