Не удалось загрузить файл или сборку или одну из ее зависимостей - PullRequest
212 голосов
/ 17 декабря 2010

У меня возникла другая проблема «Не удалось загрузить файл или сборку или одну из ее зависимостей».

Дополнительная информация: Не удалось загрузить файл или сборку 'Microsoft.Practices.Unity,Версия = 1.2.0.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 'или одна из ее зависимостей.Определение манифеста обнаруженной сборки не соответствует ссылке на сборку.(Исключение из HRESULT: 0x80131040)

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

Я выполнил поиск в своем решениикаталоги .csproj файлов и все, что у меня есть Unity, у меня есть:

Ссылка включает в себя = "Microsoft.Practices.Unity, версия = 2.0.414.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL"

Ни в одном из моих проектов нигде не найти ни одной ссылки, которая противоречит 1.2.0.0.

Есть идеи, как мне решить эту проблему?

Я также был бы признателен за советы по устранению подобных проблем в целом.

Ответы [ 35 ]

101 голосов
/ 17 декабря 2010
  1. Проверьте, ссылаетесь ли вы на сборку, которая в свою очередь ссылается на старую версию единицы. Например, допустим, у вас есть сборка с именем ServiceLocator.dll, для которой требуется старая версия сборки Unity, теперь, когда вы ссылаетесь на ServiceLocator, вы должны предоставить ей старую версию Unity, и это создает проблему.

  2. Может быть выходной папкой, в которой все проекты строят свои сборки, имеет старую версию unity.

Вы можете использовать FusLogVw , чтобы узнать, кто загружает старые сборки, просто определить путь для журнала и запустить свое решение, а затем проверить (в FusLogvw) первую строку, где находится сборка Unity. загруженный, дважды щелкните по нему и увидите вызывающую сборку, и вот, пожалуйста.

71 голосов
/ 07 октября 2013

Открыть IIS Manager

Выберите пулы приложений

затем выберите пул, который вы используете

перейти к расширенным настройкам (справа)

Измените флаг включения 32-битного приложения на false.

56 голосов
/ 15 февраля 2012

Для меня ни одно из других решений не сработало (включая стратегию очистки / восстановления).Я нашел другое обходное решение, которое заключается в закрытии и повторном открытии Visual Studio .

Полагаю, это заставляет Visual Studio перезагружать решение и все проекты, перепроверяя зависимости в процессе.

41 голосов
/ 17 декабря 2010

Попробуйте очистить папки Debug и Release в вашем решении. Затем удалите и снова добавьте единицы.

17 голосов
/ 27 мая 2016

При 99% Не удалось загрузить файл или сборку, или одна из ее зависимостей проблема вызвана зависимостями!Я предлагаю вам выполнить следующие действия:

  1. Загрузить Ходок зависимостей из http://www.dependencywalker.com/

  2. Запуск Ходок зависимостей и открыть DLL (в моем случае NativeInterfaces.dll)

  3. Вы можете увидеть один или несколько DLL с ошибкой в ​​красном Ошибка открытия файла ...

  4. Это означает, что эта DLL отсутствует в вашей системе;в моем случае имя dll MSVCR71.DLL

  5. Вы можете скачать отсутствующие dll из Google и скопировать по правильному пути (в моем случае c:\windows\system32)

  6. На этом этапе вы должны зарегистрировать новый dll в GAC (глобальный кэш сборок): откройте терминал DOS и напишите:

    cd \Windows\System32
    regsvr32 /i msvcr71.dll
    
  7. Перезапустите приложение!

15 голосов
/ 22 марта 2013

У меня сработало следующее.

  • Удалить временные файлы C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Временные файлы ASP.NET
  • Закрыть VSTS и снова открыть
  • Удаление и добавление одинаковых DLL-файлов (Примечание: вы добавляете одинаковые совпадающие версии)
15 голосов
/ 07 апреля 2015

Проверьте файл Web.config / App.config в вашем проекте.Посмотрите, правильны ли номера версий.

<bindingRedirect oldVersion="X.X.X.X-X.X.X.X" newVersion="X.X.X.X" />

Это сработало для меня.

14 голосов
/ 03 июля 2012

Microsoft Enterprise Library (на которую ссылаются .NetTiers) была нашей проблемой, которая в свою очередь ссылалась на более старую версию Unity.Чтобы решить эту проблему, мы использовали следующее перенаправление привязки в файле web.config:

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <bindingRedirect oldVersion="1.0.0.0-2.0.414.0" newVersion="2.1.505.0" />
            </dependentAssembly>
            <dependentAssembly>
                <assemblyIdentity name="Microsoft.Practices.Unity.Configuration" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <bindingRedirect oldVersion="1.0.0.0-2.0.414.0" newVersion="2.1.505.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

В качестве альтернативы вы можете просто обновить Enterprise Library до последней версии.

12 голосов
/ 30 мая 2017

Несмотря на то, что первоначальный вопрос был опубликован 5 лет назад, проблема все еще сохраняется и довольно раздражает.

Общее решение - это тщательный анализ всех ссылочных сборок, чтобы понять, что происходит не так.Чтобы упростить эту задачу, я создал инструмент (расширение Visual Studio), который позволяет выбирать сборку .Net (файл .ddl или .exe) и получать график всех сборок, на которые имеются ссылки, с выделенными конфликтующими или пропущенными ссылками.

Инструмент доступен в Visual Studio Gallery: https://marketplace.visualstudio.com/vsgallery/051172f3-4b30-4bbc-8da6-d55f70402734

Пример вывода: enter image description here

10 голосов
/ 26 ноября 2014

У меня была похожая проблема.** Ответ Juntos правильный **, но вы должны отметить один важный совет!

Для единства 2.1.505.2 отличается AssemblyVersion и AssemblyFileVersion являютсяуказано:

enter image description here

AssemblyFileVersion используется nuget, но CLR не заботится об этом!CLR будет использовать только AssemblyVersion !

Поэтому перенаправления должны применяться к версии, указанной в AssemblyVersion: 2.1.505.0

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.1.505.0" newVersion="2.1.505.0" />
</dependentAssembly>
</assemblyBinding>

См. Также: В чем различия между AssemblyVersion, AssemblyFileVersion и AssemblyInformationalVersion?

...