VSTS 2010 SGEN: ошибка: не удалось загрузить файл или сборку (исключение из HRESULT: 0x80131515)


106

У меня странная проблема с VS2010. Мы используем TFS для создания наших DLL-библиотек API, и мы использовали для ссылки на них в наших проектах, используя подключенный сетевой диск, которому было полностью доверено. Мы так работаем не менее двух лет, и все работало отлично.

Сегодня я преобразовал веб-приложение в vs2010, и когда я компилирую его в Release, он дает мне:

SGEN: ошибка: не удалось загрузить файл или сборку file: /// L: \ Api \ Release API_20100521.1 \ Release \ CS.API.Exceptions.dll или одну из его зависимостей. Операция не поддерживается. (Исключение из HRESULT: 0x80131515)

Странно то, что он работает, когда находится в профиле Debug ...

Я попытался добавить

<runtime>
   <loadFromRemoteSources enabled="true" />
</runtime>

в app.config и все равно не повезло (см. http://social.msdn.microsoft.com/Forums/en/msbuild/thread/d12f6301-85bf-4b9e-8e34-a06398a60df0 и http://msdn.microsoft.com/ en-us / library / dd409252 (VS.100) .aspx )

Я почти уверен, что эта проблема связана с Visual Studio или msbuild, так как наш код не запускается из общего сетевого ресурса в prod, потому что все DLL, на которые есть ссылки, копируются в папку bin.

Если у кого-то есть решение (или просто идея пути поиска), дайте мне знать!

Изменить: оказалось, что он работал в режиме отладки, потому что создание сборок сериализации было отключено. Как сказано в названии, это действительно проблема SGEN, поскольку именно эта утилита сообщает, что путь не является надежным ...

Ответы:


213

Мне удалось исправить эту ошибку, найдя DLL сборки в проводнике Windows, щелкнув правой кнопкой мыши, выбрав «Свойства» и нажав кнопку «разблокировать». В DLL есть поток, который помечает его как внешний файл, и, щелкнув разблокировать, вы удалите это обозначение.


работал ... единственный разработчик, у которого есть эта проблема ... прямо из TFS ... странно
spaghetticowboy

Причина, по которой он был заблокирован, заключается в том, что мой исходный код находился на общей папке. Перенес код на локальный диск - все прошло нормально. (Разрешения .NET4 SGEN по вопросам общих ресурсов).
thedrs

31
Будьте здоровы. Шутки в сторону.
FAtBalloon

Обратите внимание, что большинство корпораций не разрешают доступ локальных администраторов или прямо запрещают доступ к кнопке «Разблокировать» для обычных пользователей, включая разработчиков.
kevinarpe

2
У меня была эта проблема с DLL, скопированными из zip-файла.
79IT

59

У меня была такая же / аналогичная проблема на сервере сборки TFS, где сборка ссылалась на dll из общего сетевого ресурса.

Проблема заключается в том, что модель политики безопасности CLR v4 изменилась по сравнению с предыдущими версиями и не является изолированными сборками, как раньше.

Чтобы устранить проблему, просто найдите sgen.exe и создайте в той же папке файл sgen.exe.config со следующим содержимым:

<configuration>
  <runtime>
    <loadFromRemoteSources enabled="true" />
  </runtime>
</configuration>

sgen.exe обычно находится в

"C:\Program Files\Microsoft SDKs\Windows\v[current version]\bin\NETFX 4.0 Tools"

Вы можете прочитать о некоторых изменениях политик CAS в .NET 4.0 в этом блоге: Ссылка


1
да, я наткнулся на это решение, но было бесполезно для меня, я ничего не менял ... мы решили, так как сборки сериализации отключены
Developer IT

7
Для другой информации, SGEN обычно находится в "C: \ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ bin \ NETFX 4.0 Tools"
Стив Купер,

ИТ-разработчик: В моем случае нельзя было отключить генерацию сборок сериализации, так как они мне были нужны. Но, разумеется, решением может быть и поворот сборок сериализации.
Мартин Хилдал

1
Обратите внимание, что если это 64-битная машина, вам нужно создать под ... \ Bin \ NETFX 4.0 Tools \ x64 \
Вивек Айер

1
Для VS2015 найдите его по адресу: C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 Tools
Фаршид,

23

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


У меня тоже сработало. Это правильный ответ и для OP, основываясь на его отредактированном комментарии в вопросе.
акусмата

Работал у меня. Ткс.
Винисиус Гонсалвеш

1
Свойства проекта -> Сборка -> Создание сборки сериализации было автоматическим, после установки его в Off компиляция начала работать как шарм. +1 и спасибо.
Honza P.

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

Только у одного проекта была эта проблема - переключено с Авто на Выкл - этот проект ссылался на SOAP WS.
Субха,


3

У меня была такая же проблема, и я исправил ее, добавив sgen.exe.config в C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0 Tools.

с этой простой конфигурацией, как говорили другие

<?xml version ="1.0"?>
<configuration>
  <runtime>
    <loadFromRemoteSources enabled="true" />
  </runtime>
</configuration>

2

Для тех из вас, кто использует 64-битную версию службы сборки TFS, мне пришлось создать файл конфигурации по следующему пути:

 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\x64

И содержимое файла:

<?xml version ="1.0"?>
<configuration>
<runtime>
    <loadFromRemoteSources enabled="true" />
</runtime>
</configuration>

1

У меня была такая же проблема, загрузил сборку в GAC и работал


дело в том, что мы не хотим, чтобы они были в GAC. мы решили, что сборки сериализации отключены
ИТ-разработчик

1

В моем случае сработало добавление приведенного ниже фрагмента в файл app.config. Я использую Windows XP с пакетом обновления 1 для VS2010.

<configuration>
  <runtime>
    <loadFromRemoteSources enabled="true" />
  </runtime>
</configuration>

0

Если вы работаете в Windows 7, файл sgen.exe можно найти по адресу:

C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v7.0A \ Bin \ NETFX 4.0 Tools

Мне пришлось создать файл sgen.exe.config и поместить его туда, и эта проблема исчезла.


0

Ни тот, unblockни тот configу меня не работали. В чем для меня был фокус, так это в этом советеcaspol . Я побежал

 %windir%\Microsoft.NET\Framework\v2.0.50727\CasPol.exe -m -ag 1.2 -url file://UncPathName/UncSubPath/* FullTrust

И я был готов к работе, даже перезапуск VisualStudio не требовался.


0

У меня возникла аналогичная проблема, и я, наконец, решил ее, удалив файл licenses.licx в папке «Свойства» решения.


0

На всякий случай, как и я, Unblock не был решением, поскольку Unblock не отображается в моих свойствах файла dll. Продолжил поиск и закончил тем, что закрыл свой файл решения и снова открыл его с помощью локальной копии C: вместо сетевого UNC-пути к файлу проекта sln. Смог опубликовать после прохождения этого маршрута.


0

В моем случае была заблокирована куча dll.

Чтобы разблокировать все файлы в папке, я использовал Power Shell со следующей командой

dir -Path [directory path] -Recurse | Unblock-File
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.