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

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

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

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

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

ссылка Include= " Microsoft.Практика.Единство, Версия=2.0.414.0, культура = нейтральная, Значения PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"

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

любые идеи, как я стоит ли решать эту проблему?

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

30 ответов


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

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

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


открыть Диспетчер IIS

Выбрать Пулы Приложений

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

перейдите в дополнительные настройки (справа)

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


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

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


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


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

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

библиотека Microsoft Enterprise (ссылка .NetTiers) была нашей проблемой, которая, в свою очередь, ссылалась на более старую версию Unity. Для решения проблемы мы использовали следующее перенаправление привязки в интернете.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>

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


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

  1. скачать Зависимость Walker от http://www.dependencywalker.com/

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

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

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

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

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

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


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

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

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

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


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

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

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


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

для unity 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?


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


  • Goto:решение ->пакета
  • нажать на кнопку дополнительно Tab (найти ниже страницы)
  • добавить dll к дополнительным сборкам (таким образом, мы можем добавить внешние библиотеки DLL в sharepoint).

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

  1. Правой Кнопкой Мыши на имени решения
  2. Нажмите Очистить Решение
  3. Перезапустите Visual Studio
  4. свойства проекта Goto > > Build
  5. изменить конфигурация to релиз
  6. Начать Отладку (F5)

1) , 2)

Right Click on the Solution name

4) , 5)

Change Configuration to Release

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


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

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


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

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


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


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

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


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


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


Я "Set as Startup Project" выгруженная / разархивированная библиотека / проект.

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

Он работал!

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


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


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

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

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

Microsoft.Практика.Единство.Перехват.dll файлы


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


для меня восстановление игры unity без Unity C# Proects флажок работал.


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

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

  1. удалить ссылку
  2. переименовать DLL
  3. импортировать ссылку Еще раз

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


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


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

  <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>

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


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

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


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

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

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