Подтвердить что ты не робот

Как я могу запретить Visual Studio блокировать файлы документации xml в каталоге bin?

В моем визуальном студийном решении есть веб-приложение и приложение unit test. В моем веб-приложении используется log4net. Я хочу иметь возможность использовать msbuild из командной строки для создания моего решения. Однако всякий раз, когда я создаю решение из командной строки, я получаю ошибки сборки, потому что он не может скопировать log4net.xml в каталог тестового проекта bin.

Сообщение об ошибке:

"Невозможно скопировать файл" \bin\log4net.xml "в" bin\Debug\log4net.xml ". Доступ к пути" \bin\log4net.xml "отклонен."

Похоже, что Visual Studio блокирует этот файл, но я не могу понять, зачем ему это нужно. Есть ли способ запретить VS блокировать файлы документации XML в загруженном проекте?

4b9b3361

Ответ 1

У меня тоже была проблема с Visual Studio. Мы используем NAnt вместо MSBuild, но проблема такая же. Я смог обойти это, изменив файл сборки, чтобы игнорировать ошибки при копировании документации xml.

Обратите внимание, что это фактически не решает исходную проблему, так как файлы xml по-прежнему заблокированы, но это обходное решение было для нас достаточно хорошим, так как фактическое содержимое нашей XML-документации не меняется очень часто.

Ответ 2

Я нашел следующее решение: В событии postbuild VS или в NAnt/MSbuild script выполните команду cmd script

handle.exe -p devenv [Path to the folder with locked files] > handles.txt

FOR /F "skip=5 tokens=3,4 delims=: " %%i IN (handles.txt) DO handle -p %%i -c %%j -y

handle.exe можно найти здесь http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx

первая строка script дампов для handles.txt всех дескрипторов для файлов, заблокированных VS вторая строка считывает идентификаторы дескриптора из файла и убивает дескрипторы

После выполнения script файлы могут быть удалены/заменены/перемещены и т.д.

Ответ 3

Если вы в полной мере исключаете файлы xml и pdb из вывода, вы можете передать /p:AllowedReferenceRelatedFileExtensions=none в msbuild в командной строке.

(Благодаря ответу fooobar.com/questions/297790/...)

EDIT: Если у вас также есть проблемы с DLL файлами, имеющими эту ошибку, я недавно обнаружил решение переменной окружения: fooobar.com/questions/94404/...

Ответ 4

Krystan писал (а):

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

Наша проблема блокировки файлов xml отсутствует в каталоге bin проектов, а не в справочной директории. Мы ударяем его при выполнении TortoiseSVN- > Update, где доступна новая версия. Предполагая это, потому что VS использует файл для intellisense.

Для тех, кто сталкивается с этой проблемой блокировки из-за TortoiseSVN- > Update, я в настоящее время экспериментирую с крюком предварительного обновления, который удаляет повреждающий файл перед обновлением (они будут восстановлены, если обновление не потребуется) пока это работает (что странно), но я не проверил его достаточно тщательно, чтобы сказать наверняка. Будет обновлен этот ответ, если он окажется надежным.

Здесь надеюсь, что MS исправит его в VS 2010.

Ответ 5

В основном не проверяйте файлы в папке bin, это плохая идея.

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

Msbuild затем скопирует это в каталог bin для веб-проектов:)

У нас есть эта точная проблема с людьми, проверяющими материал в каталоге bin, если вам абсолютно не нужно каталогов bin, либо вообще не нужно проверять, либо просто иметь файлы .refresh, чтобы избежать подобных сбоев.

Бит поздно на ответ, извините:)