Ответ 1
Проблема закончилась тем, что в web.config кто-то добавил:
hostingEnvironment shadowCopyBinAssemblies="false"
Прокомментировав это, все началось нормально. Какой кошмар!
Для одного из моих приложений ASP.NET 3.5 каждый раз, когда я пытаюсь создать веб-приложение, он вызывает следующие ошибки сборки в Visual Studio 2008:
Ошибка 165 Не удается скопировать файл "C:\InOne\Common\DexProcessor\bin\Debug\DexProcessor.dll" в "bin\DexProcessor.dll". Процесс не может получить доступ к файлу 'bin\DexProcessor.dll', потому что он используется другим процессом. InVision2 Ошибка 166 Не удалось скопировать файл "C:\InOne\Common\DexParser\bin\Debug\InOne.DexParser.dll" в "bin\InOne.DexParser.dll". Процесс не может получить доступ к файлу 'bin\InOne.DexParser.dll', потому что он используется другим процессом. InVision2 Ошибка 167 Не удалось скопировать файл "C:\InOne\Common\AlertProcessor\bin\Debug\InOne.Invision.AlertProcessing.dll" в "bin\InOne.Invision.AlertProcessing.dll". Процесс не может получить доступ к файлу 'bin\InOne.Invision.AlertProcessing.dll', потому что он используется другим процессом. InVision2 Ошибка 168 Не удается скопировать файл "C:\InOne\Common\InVision.BusinessLogic\bin\Debug\InVision.BusinessLogic.dll" в "bin\InVision.BusinessLogic.dll". Процесс не может получить доступ к файлу 'bin\InVision.BusinessLogic.dll', потому что он используется другим процессом. InVision2 Ошибка 169 Не удалось скопировать файл "C:\InOne\Common\InVision.Common\bin\Debug\InVision.Common.dll" в "bin\InVision.Common.dll". Процесс не может получить доступ к файлу 'bin\InVision.Common.dll', потому что он используется другим процессом. InVision2 Ошибка 170 Не удалось скопировать файл "C:\InOne\Data\bin\Debug\InVision.Data.dll" в "bin\InVision.Data.dll". Этот процесс не может получить доступ к файлу 'bin\InVision.Data.dll', потому что он используется другим процессом. InVision2 Ошибка 171 Не удалось скопировать файл "C:\InOne\Common\InVision.DataAccessLayer\bin\Debug\InVision.DataAccessLayer.dll" в "bin\InVision.DataAccessLayer.dll". Процесс не может получить доступ к файлу 'bin\InVision.DataAccessLayer.dll', потому что он используется другим процессом. InVision2 Ошибка 172 Не удалось скопировать файл "C:\InOne\Common\InVision.DataAccessLayer.SqlClient\bin\Debug\InVision.DataAccessLayer.SqlClient.dll" в "bin\InVision.DataAccessLayer.SqlClient.dll". Этот процесс не может получить доступ к файлу 'bin\InVision.DataAccessLayer.SqlClient.dll', потому что он используется другим процессом. InVision2
Это только что началось неделю назад и очень раздражает... Я должен зайти в папку bin в веб-приложении и удалить файлы pdb, а затем это позволит мне удалить DLL большую часть времени. Время от времени это не позволяет мне закрывать Visual Studio, а затем он позволяет мне удалять их. Я проверил и это Visual Studio (devenv), который блокирует DLL. Перезагрузка машины не помогает.
Это действительно снижает мою производительность, есть ли что-нибудь, что я могу сделать, чтобы решить эту проблему?
Как уже упоминалось, Visual Studio 2008 (devenv.exe) - это процесс блокировки библиотек DLL.
Я заметил что-то... Когда он компилируется успешно, он копирует все библиотеки DLL в папку bin, а затем все они удаляются, а затем новый набор копируется в корзину. Когда это не удастся, первый набор DLL файлов будет скопирован, а затем он не сработает. Поэтому, похоже, он использует папку bin для 2 вещей, когда это должно быть только для 1. Помогает ли это?
Проблема закончилась тем, что в web.config кто-то добавил:
hostingEnvironment shadowCopyBinAssemblies="false"
Прокомментировав это, все началось нормально. Какой кошмар!
Используйте ProcessExplorer для узнать, какой процесс открыт для файла и оттуда.
Если процесс использует эти DLL файлы, их нельзя удалить и перезаписать. При компиляции вам придется убить или иным образом остановить процесс, используя эти DLL.
Я боролся с этой проблемой в течение лет!
Вы пытались добавить это к вашему событию PREBUILD?
if exist "$(TargetPath).locked" del "$(TargetPath).locked"
if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"
Смотрите это для получения дополнительной информации: http://nayyeri.net/file-lock-issue-in-visual-studio-when-building-a-project
Вот еще один поток, с большим количеством вещей, чтобы попробовать...
Что сработало для меня, это следующее событие предварительной сборки:
if exist "$(TargetPath).locked.bak" del "$(TargetPath).locked.bak"
if exist "$(TargetPath).bak" del "$(TargetPath).bak"
if exist "$(TargetPath).locked" ren "$(TargetPath).locked" "$(TargetFileName).locked.bak"
if exist "$(TargetPath)" ren "$(TargetPath)" "$(TargetFileName).bak"
В моем случае я заметил, что 2 файла создаются и их нельзя удалить. Однако вы можете переименовать их (и они все еще используются, если вы попытаетесь удалить их). В следующей сборке переименованные файлы больше не используются (блокировка удалена), и их можно удалить, что и делает предыдущий script, после чего он может безопасно переименовывать новые заблокированные файлы, чтобы не возникало проблем в генерируя вывод сборки.
Другие события предварительной сборки, размещенные здесь и в других местах, мне не помогли (они работали только для одной дополнительной сборки или только несколько, прежде чем проблема возникла снова). Поэтому теперь я использую тот, который был выше, для моих целей отладки.
Я просто хотел сказать, что эта проблема началась со мной сегодня. (VS 2010, С#) Я работаю над этой программой в течение месяца без этой проблемы, теперь она началась. Я запускаю VS, меняю код, компилирую и тестирую и завершаю программу. Сделайте другое изменение, скомпилируйте и BOOM Не удалось скопировать файл "obj\x86\Debug\progname.exe" в "bin\Debug\progname.exe", потому что если он используется другим процессом.
ProcExp показывает только Visual Studio (фактически devenv.exe), используя этот файл. Существует только один экземпляр VS. В моем debug\progname.exe есть два списка: один тип DLL, другой - дескриптор типа.
Использование devenv/ResetSettings ничего не разрешило, но потрачено впустую на 10 минут, возвращая все обратно к моему желаемому виду.
Использование переименования событий PREBUILD, упомянутого выше, решает проблему для нескольких изменений, но при следующем изменении файл exe.locked заблокирован и не может быть удален. Тогда переименование не выполняется.
Имя файла debug\progname.exe остается заблокированным даже после закрытия проекта.
Закрывая VS, вручную удаляйте файлы в папке отладки, открывая VS и мое решение, а затем Build- > Clean Solution работает для меня, по крайней мере, теперь работает, после того как я сделал все это.
Надеюсь, что это поможет -rwg
Мне не повезло с событиями предварительной сборки, к сожалению. То, что работало, в типичной модели IT Crowd, заключалось в том, чтобы закрыть Visual Studio и снова открыть его.
Простое исправление для Windows 7: Запустите сервис "Опыт применения". Найдите "Услуги" в "Панели управления".
-Martin
Если у вас есть Visual Nunit, это должен быть файл dll для блокировки.
Привет, я немного столкнулся с той же проблемой. Это очень раздражает.
У меня есть более легкое, но не очень эффективное решение проблемы. Очистка проекта или решения решает проблему.
Просто перейдите в \Debug\bin и удалите все DLL файлы.
Отлично работает для меня.
У меня была эта проблема в веб-проекте с System.Web.Extensions.dll из папки Microsoft Reference Assemblies. Установка "Скопировать местное" в значение false в ссылочных свойствах исправлена.
Вы можете скачать отличную программу SysInternals Handle. Это скажет вам, какие процессы имеют блокировку для соответствующих файлов.
Если это внешняя программа (например, сканер/индексатор вирусов), это должно помочь. Если он просто сообщает Visual Studio (devenv.exe) в качестве виновника, то он будет менее полезен!
Я предполагаю, что вы уже знаете это VS2008, который блокирует файлы. Вы можете попробовать запустить MSBuild из командной строки и посмотреть, исчезли ли проблемы. К сожалению, Visual Studio может заблокировать файлы, если это не стоит, в некоторых труднодоступных сценариях.
Блокировки файлов - это всего лишь часть работы с Visual Studio. Нет никаких отличных способов обойти эту проблему.
В Visual Studio 2008 произошла ошибка, которая была исправлена в пакете обновления 1 (SP1), которая может быть вашей проблемой. Это происходит, когда вы ссылаетесь на встроенный файл JavaScript и вызываете проблему, которую видите. Подробнее см. здесь.
У меня была проблема simillar решение для меня было посмотреть на файл *.csproj, и я обнаружил, что отсутствующий файл так и снизу был правильным, поэтому я просто удалил строки, и он сразу сработал
Удаление следующих строк из моего app.config решило это для меня - я использую VS2010.
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="nunit.framework" publicKeyToken="96D09A1EB7F44A77" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-2.5.7.10213" newVersion="2.5.7.10213"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
Убедитесь, что dll пользователя и приложение, ссылающиеся на dll, нацелены на одну и ту же платформу .NET. У меня был случай, когда рамки были разными, что вызвало эту проблему.
Файл нельзя удалить, к счастью можно переименовать и переместить. Поэтому я создал сборку prebuild (используя дату и время как случайную строку, могут быть более простые способы):
For /f "Tokens=2,3,4 Delims=/. " %%i In ("%Date%") Do @(
Set Month=%%i& Set Day=%%j& Set Year=%%k
)
set ActDate=%Year%-%Month%-%Day%
For /f "Tokens=1,2,3 Delims=/.:, " %%i In ("%Time%") Do @(
Set Hour=0%%i& Set Min=%%j& Set Sec=%%k
)
set ActTime=%Hour:~-2,2%-%Min%-%Sec%
move c:\MyProject\bin\Debug\myproject.exe c:\garbage\%ActDate%_%ActTime%_myproject.exe
Это случается со мной иногда при использовании Visual Nunit для модульных тестов.
Кажется, что процесс "VisualNunitRunner.exe" блокирует DLL файлы в целевом каталоге.
Я использовал Unlocker, чтобы найти процесс, убить его или разблокировать.
У меня была аналогичная проблема и я смог ее решить, изменив "AssemblyInfo.cs"
Ошибка сборки Visual Studio: невозможно скопировать exe файл из obj\debug в bin\debug
Случилось только сейчас. Пришлось убить все процессы devenv.exe(после закрытия окна VS 2010 их было 3).
Удалите двоичные файлы из папки bin\Debug и перекомпилируйте их. Это работает для меня.
Эта проблема возникает, когда вы меняете проект из одного каталога в другой. Для ошибки копирования Shadow вы могли бы добавить эту строку в свой web.config. Чтобы исправить это, выполните следующие действия.
В файле web.config, если есть что-то вроде
<hostingEnvironment shadowCopyBinAssemblies="false" />
измените это на
<hostingEnvironment shadowCopyBinAssemblies="true" />
или удалите его. Затем он будет работать нормально
Я использовал Visual Studio 2012, когда это начиналось с 7-летнего решения (второй или третий раз: я уже к этому вопросу).
Я попробовал различные вуду. Я очистил раствор. Не работает. Я перезапустил Visual Studio. Не работает. Я был уверен, что последний будет работать, потому что это вуду, который работал в прошлый раз.
В конце концов, я вспомнил, что обновление для системы безопасности было установлено прошлой ночью и было настроено, когда я начал свою машину этим утром - (Подключен или нет? Нет идеи). Итак, я перезапустил Windows и вуаля, все это снова работало как волшебство.
Спасибо MS за больший ум.
Я также сталкиваюсь с этой проблемой. Сначала я пытаюсь удалить спорный .dll, но он показывает Access denied, затем я закрываю VS и после открытия работает нормально.
Как и Benoit, но не требует установки инструмента, вы можете использовать команду tasklist (task manager) в командной строке с помощью переключателя '/m', чтобы получить список процессов с помощью dll:
tasklist/m mylocked.dll
Я видел несколько сообщений, указывающих, что вы должны сделать это из каталога злоумышленника, но я не нашел этого.
вы также можете удалять папки bin и obj во всех проектах в решении, а затем перестраивать решение.
откройте свой проект в проводнике, щелкнув свойство папки bin и снимите флажок только для чтения, это работает в моем проекте форм xamarin
Я наконец то как это исправить. Это происходит, потому что первый отладочный exe еще работает. Итак, зайдите в Диспетчер задач → Вкладка "Процесс" → [имя вашего проекта exe] и завершите процесс exe.