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

239

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

Дополнительная информация: Не удалось загрузить файл или сборку «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.

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

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

ronag
источник
1
Может ли какая-либо из ваших сборок, на которые вы ссылаетесь, использовать что-то из старой Unityбиблиотеки?
дециклон
3
Возможно ... но как я могу найти, какие сборки? У меня много проектов в моем решении и много потенциальных подозреваемых ...
метод
3
Это не ссылка на сборку, вы ссылаетесь на версию 2.0. Но во время выполнения CLR находит 1.2, старую версию. Если вы не видите эту старую DLL в своем каталоге компоновки, используйте Fuslogvw.exe, чтобы узнать, как CLR обнаружил эту старую копию.
Ганс Пассант
2
Посмотрите на папку bin вашего проекта и посмотрите, есть ли в имени вашего проекта конфликт в его имени. Просто удалите его, а затем восстановите решение. Это сработало для меня.
coggicc
11
«или одна из его зависимостей» - это часть, которая действительно раздражает меня. Если он не может загрузить «одну из своих зависимостей», в сообщении об ошибке должно быть указано, какая «одна из его зависимостей» не может быть загружена. Нынешняя форма бесполезна, с таким же успехом можно сказать, что она не может загружать вещи
Пол Маккарти

Ответы:

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

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

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

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

Открыть IIS Manager

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

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

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

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

kranthi
источник
IIS -> выбрать каждый ApplicationPool -> Основные настройки -> проверить, выбрана ли последняя версия фреймворка в раскрывающемся списке «Версия .NET Framework»
Мартин
Вы также можете щелкнуть правой кнопкой мыши свой проект в VS. и уберите
галочку
Спасибо. Это сработало. Ну, это было уже верно в моем случае, просто для попытки. Я сделал это Ложным, и это сработало.
meekash55
Когда я объединял проект с одного сервера на другой, этот флаг снова был ложным, спасибо за решение!
Appsum Solutions
69

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

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

Robotnik
источник
33
Если вы не верите, что это сработает, по крайней мере, попробуйте. Я не мог поверить в это сам, пока не сделал.
Бен Калл
3
😍😍😍😍😍😍😍😍😍😍😍 работал для меня
Devidas M Das
48

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

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

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

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

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

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

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

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

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

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

Стефано Лонати
источник
22
Ходок за зависимостями хорош, но копирование случайных DLL из Интернета в Windows ... менее здорово. Лучше попытаться найти установщик, который предоставляет эти библиотеки.
RJFalconer
Я получил несколько файлов ( API-MS-WIN-CORE-KERNEL32-PRIVATE-L1-1-1.DLL) не нашел и привел меня к этому StackOverflow вопрос . По сути, имейте в виду, что для некоторых файлов можно посмотреть на ложное срабатывание, ссылка содержит более подробную информацию.
cheriejw
16

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 до последней версии.

Ребекка
источник
16

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

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

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

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

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

Джасим Аббас
источник
2
Это сработало для меня, хотя это был web.config, а не app.config
samneric
15

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

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

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

Пример вывода: введите описание изображения здесь

marss19
источник
Не работает с выпусками Visual Studio для сообщества
Draex_
Я считаю, что должна быть другая проблема, не связанная с выпуском Visual Studio. Я протестировал расширение в версиях VS 2017 и VS 2015 Community. На самом деле он был разработан с помощью VS 2017 Community Edition.
19
Ага. У вас установлены другие расширения? На этой странице сказано, что DGML не поддерживается в сообществе VS: msdn.microsoft.com/en-us/library/hh871439.aspx#VersionSupport
Draex_
1
В выпуске Community нет архитектурных инструментов, но доступен сам редактор DGML. Вы можете установить его, выбрав «Установить редактор DGML» в разделе «Отдельные компоненты» -> «Инструменты кода» через установщик Visual Studio -> Изменить
marss19
11

СкриншотВ обозревателе решений щелкните правой кнопкой мыши проект (не решение), на вкладке «Сборка» выберите цель платформы: «Любой процессор».

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

Ответ Juntos правильный, но вы также должны учесть:

Для Unity v2.1.505.2 указаны разные атрибуты AssemblyVersion и AssemblyFileVersion :

введите описание изображения здесь

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?

Евгений Найда
источник
6

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

  1. Щелкните правой кнопкой мыши по названию решения.
  2. Нажмите Чистое решение
  3. Перезапустите Visual Studio
  4. Перейти к проекту Свойства >> Построить
  5. Изменить конфигурацию на выпуск
  6. Начать отладку (F5)

1), 2)

Щелкните правой кнопкой мыши по названию решения.

4), 5)

Изменить конфигурацию на выпуск

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

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

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

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

Sjaan
источник
Превосходно! Мое имя файла DLL и пространство имен были разными, я скопировал пространство имен и переименовал мою DLL.
Аномный хан
5

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

Totodile
источник
4

Спасибо Риддхи М. Следующее сработало для меня.

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

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

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

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

Джоэл Мартинес
источник
3

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

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

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

Creamstout10
источник
3

У меня была та же проблема, я решил ее с помощью инструкций ниже:

  1. откройте меню инструментов и выберите опцию
  2. в настройках окна перейдите в раздел Проекты и решения / Веб-проекты
  3. чек use the 64bit version of IIS ...

введите описание изображения здесь

Мохаммед Алмаси
источник
2

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

Гуччи
источник
2

Я "Сделать стартовым проектом" выгруженную / найденную библиотеку / проект.

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

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

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

nirav
источник
2

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

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

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

Microsoft.Practices.Unity.Interception.dll

МакГайвер
источник
2

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

user3791372
источник
2

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

Молитвенный рудра
источник
2

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

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

  1. Удалить ссылку
  2. Переименовать DLL
  3. Импортируйте ссылку снова

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

Николас Рауль
источник
2

Попробуйте проверить, установлено ли для свойства «Copy to Local» для ссылки значение true, а для конкретной версии установлено значение true. Это актуально для приложений в Visual Studio.

Шринивас Сомасундарам
источник
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>

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

garryp
источник
1

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

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

Базит Дуррани
источник