Не удалось загрузить файл или сборку или одну из ее зависимостей

186

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

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

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

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

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

Невозможно найти какую-либо ссылку в любом месте, которая идет против 1.2.0.0 в любом из моих проектов.

Любые идеи, как я должен решить это?

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

  • 1
    Может ли какая-либо из ваших сборок, на которую вы ссылаетесь, использовать какие-то вещи в старой библиотеке Unity ?
  • 3
    Возможно ... но как я могу найти, какие сборки? У меня много проектов в моем решении и много потенциальных подозреваемых ... метод проб и ошибок кажется немного безнадежным ...
Показать ещё 6 комментариев
Теги:
compiler-errors
reference

33 ответа

89
Лучший ответ
  • Проверьте, ссылаетесь ли вы на сборку, которая, в свою очередь, ссылается на старую версию единства. Например, скажем, у вас есть сборка под названием ServiceLocator.dll, для которой требуется старая версия сборки Unity, теперь, когда вы ссылаетесь на ServiceLocator, вы должны предоставить ей старую версию Unity, и это создает проблему.

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

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

  • 6
    Где файл журнала FuseLogVw
  • 1
    Чтобы избежать необходимости поиска файла журнала, вы можете указать собственный путь к журналу: Настройки, установите флажок Включить пользовательский путь к журналу, введите собственный путь к журналу, обновите.
65

Открыть диспетчер IIS

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

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

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

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

  • 0
    IIS -> выберите каждый ApplicationPool -> Основные параметры -> проверить, выбрана ли самая последняя платформа в раскрывающемся списке «Версия .NET Framework»
  • 0
    Вы также можете щелкнуть правой кнопкой мыши свой проект в VS. и удалите флажок предпочитаю 32 бит
Показать ещё 1 комментарий
45

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

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

  • 25
    Если вы не верите, что это сработает, по крайней мере, попробуйте. Я не мог поверить в это сам, пока не сделал.
40

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

  • 3
    Эта проблема может быть вызвана многими причинами ... ваше решение решило мои проблемы, а также может решить и другие.
  • 1
    @ScottRippey Это сработало для меня. Сначала я удалил все файлы .pdb, а затем перезагрузил свой проект и перестроил его.
15

После меня работали.

  • Удалить временные файлы C:\Windows\Microsoft.NET\Framework\v4.0.30319\Временные файлы ASP.NET
  • Закрыть VSTS и снова открыть.
  • Удалить и добавить те же DLL (Примечание: вы добавляете одинаковые версии)
13

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>

Кроме того, вы можете просто обновить корпоративную библиотеку до последней версии.

12

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

  1. Загрузите Dependency Walker с http://www.dependencywalker.com/

  2. Запустите Dependency Walker и откройте dll (в моем случае NativeInterfaces.dll)

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

    Изображение 106698

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

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

  6. На этом этапе вы должны зарегистрировать новую dll в GAC (Global Assembly Cache): открыть терминал DOS и написать:

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

  • 16
    Ходок за зависимостями - это здорово, но копирование случайных DLL из Интернета в Windows ... менее здорово. Лучше попытаться найти установщик, который предоставляет эти библиотеки.
  • 0
    Не показывал ничего для меня.
Показать ещё 1 комментарий
10

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

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

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

Пример вывода: Изображение 106699

  • 0
    Не работает с выпусками сообщества Visual Studio
  • 0
    Я считаю, что должна быть другая проблема, не связанная с выпуском Visual Studio. Я протестировал расширение в версиях VS 2017 и VS 2015 Community. На самом деле он был разработан с помощью VS 2017 Community Edition.
Показать ещё 2 комментария
10

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

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

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

  • 1
    Это сработало для меня, хотя это был web.config, а не app.config
9

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

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

Изображение 106700

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?

7

Изображение 106701 В проводнике решений щелкните правой кнопкой мыши по проекту (а не по решению), на вкладке сборки выберите Платформа цели: "Любой процессор".

  • 0
    это сработало для меня!
  • 0
    После проверки пула приложений для параметра «Включить 32-разрядные приложения» было установлено значение «Ложь», но моей целевой платформой был x86. Изменение его на Любой процессор ИЛИ x64 исправило мою проблему.
5

Я также получил эту ужасную ошибку и нашел решение для этого...

  • Щелкните правой кнопкой мыши по имени решения
  • Нажмите "Чистое решение"
  • Перезапустить Visual Studio
  • Перейти к проекту Свойства → Сборка
  • Измените Конфигурация на Отпустить
  • Начать отладки (F5)

1), 2)

Изображение 106702

4), 5)

Изображение 106703

Надеюсь, это тоже поможет.

5
  • Перейти: Решение Пакет
  • Нажмите вкладку Дополнительно (найдите под страницей)
  • Добавьте dll к дополнительным сборкам (таким образом мы можем добавить внешние DLL в sharepoint).
  • 7
    У меня нет "Solution -> Package" в моем проекте VS2010
4

В моем случае в папке bin была не ссылочная dll под названием Unity.MVC3, я безуспешно пытался найти любую ссылку на это в visual studio, поэтому мое решение было так просто, как удалить эту DLL из папки bin.

4

Спасибо Ридди М. После меня работали.

Удалить временные файлы C:\Windows\Microsoft.NET\Framework\v4.0.30319\Временные файлы ASP.NET Закрыть VSTS и снова открыть Удалите и добавьте одни и те же DLL (обратите внимание: вы добавляете одинаковые совпадающие версии)

  • 0
    Потратил так много времени на это, и я не могу поверить, что это был ответ. Обычно это хорошее решение, когда вы видите странное поведение в VS. Спасибо.
4

Не уверен, что это может помочь.

Проверьте соответствие имени Assembly и пространства имен Default в свойствах в ваших ассамблях. Это разрешило мою проблему, которая дала ту же ошибку.

3

Эта проблема произошла со мной, когда одна из моих зависимых библиотек составляла DLL с "Any CPU", когда родительская библиотека ожидала компиляцию "x64".

3

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

Честно говоря, вам, вероятно, просто нужно обновить свою ссылку. Похоже, что вы либо обновили свою версию, либо не обновили ссылки, либо это относительный путь, если вы держите свое решение в контроле источника. Просто подтвердите свои предположения и повторно добавьте ссылку.

2

У меня было это сегодня, и в моем случае проблема была очень странной:

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Owin.Host.SystemWeb" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.1.0" newVersion="3.1.0.0" />
  </dependentAssembly>0.

Обратите внимание на блуждающих символов в конце XML - так или иначе они были перемещены из номера версии в конец этого блока XML!

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Owin.Host.SystemWeb" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
  </dependentAssembly>

Изменилось выше и вуаля! Все снова работало.

2

Попробуйте проверить, установлено ли для свойства "Копировать в локальное" значение true, а для конкретной версии установлено значение "Истина". Это относится к приложениям в Visual Studio.

2

В моем случае ни один из предложенных ответов не работал.

Вот что сработало для меня:

  • Удалить ссылку
  • Переименовать DLL
  • Импортировать ссылку снова

Второй шаг был важен, по-видимому, так как он не работал без него.

2

Для меня восстановление игры единства без Unity С# Проверяет Checkmark Checkmark.

2

Следите за противоречивыми ссылками. Даже после чистых и перестроенных противоречивых ссылок все еще будет возникать проблема. Моя проблема заключалась между Афором и Согласием. Я удалил обе ссылки и снова добавил ссылки, переустанавливая конкретную ссылку (в частности, для моего случая, просто для Accord).

2

Мое решение для .NET 4.0 с использованием Enterprise Library 5 состояло в том, чтобы добавить ссылку на:

Microsoft.Practices.Unity.Interception.dll

2

После меня работали.

  • Удалить временные файлы C:\Windows\Microsoft.NET\Framework\v4.0.30319\Временные файлы ASP.NET
    • затем щелкните правой кнопкой мыши на Temporary Asp.net Files > properties > security и дать полный доступ к управлению IIS и всем пользователям, запускающим мой проект.
2

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

  • 0
    Это заняло у меня несколько часов, чтобы выяснить .... Я случайно назвал свой проект модульного тестирования тем же именем, что и основной проект, поэтому проект модульного тестирования dll, должно быть, переписывал проект dll
2

I "Установить как проект запуска" незагруженную/необоснованную библиотеку/проект.

Затем развернул его.

Это сработало!

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

2

Вам нужно удалить файл appname.dll из выходной папки. Отладка и удаление папок. Перестройте и скопируйте в файл регенерированной DLL файла.

1

Я продолжал получать эту ошибку в своем проекте веб-форм в visual studio 2015. Я завершаю Visual Studio, и я убил ScriptedSandbox64.exe, Microsoft.VsHub.Server.HttpHostx64.exe, Microsoft.VsHub.Server.HttpHostx.exe * 32, Microsoft.VisualStudio.Web.Host.exe * 32, и это помогло решить проблему.

1

Мое решение было:

У меня есть трехуровневое приложение, и я забыл скопировать DLL и на правильный путь в IIS. Сразу после того, как он скопировал его в нужное место, это сработало для меня.

1

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

Я получал ту же ошибку с некоторыми DLL, отсутствующими в Bin Folder. Я попытался удалить, восстановить все из Team Foundation Server, но не работал. Получил копию папки Bin с моей офис-мателокальной машины и заменил ее. Это тоже не сработало. Наконец, я вручную перешел на FTP-сервер, получил копию DLL, которая отображалась как отсутствующая, и затем она начала показывать, что следующий файл в последовательности списка файлов отсутствует.

Итак, я ftped server Получил все Bin Folder, вручную заменял каждый файл по одному. (Не Ctrl + All и заменить.. Я пробовал: он не работал.) И как-то это сработало...

1

если вы получаете это сообщение об ошибке, открыв приложение на вашем Windows XP, это означает, что сначала вы установили это приложение из-за того, что он не работает без сети 4 и пакета обновления 3. вы установили оба, и снова вы получаете эту ошибку, поэтому вам нужно снова установить это приложение, но сначала удалить из add и remove

Если это не работает, пожалуйста, не злоупотребляйте мной. я также младший

0

У меня была эта проблема, ошибка на самом деле была очень глупой. Я указал неверное расположение файла DLL, после того как вы изменили местоположение, чтобы правильно установить место, загрузка была выполнена правильно (ответ, чтобы кто-то еще не допустил ошибку).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню