Не вдалося завантажити файл чи збірку або одну з його залежностей


238

У мене є ще одна з цих проблем "Не вдалося завантажити файл чи збірку або одну з її залежностей".

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

Я поняття не маю, що викликає це чи як я можу налагодити це, щоб знайти причину.

Я здійснив пошук у своїх каталогах .csproj-файлів рішень, і я маю:

Посилання включає = "Microsoft.Practices.Unity, версія = 2.0.414.0, культура = нейтральна, PublicKeyToken = 31bf3856ad364e35, процесорArchitecture = MSIL"

В жодному моєму проекті не можу знайти жодної посилання, яка суперечить 1.2.0.0.

Будь-які ідеї, як мені слід вирішувати це?

Я також вдячний порадам, як налагодити подібні проблеми в цілому.


1
Чи може будь-яка з ваших посилань використовувати деякі матеріали в старій Unityбібліотеці?
дециклон

3
Напевно ... але як я можу знайти які збірки? У мене є багато проектів у моєму вирішенні та багато потенційних підозрюваних ... судова справа та помилки
грубими силами

3
Це не посилання на збірку, ви посилаєтесь на версію 2.0. Але під час виконання CLR знаходить 1.2, стару версію. Якщо ви не бачите цієї старої DLL у своєму каталозі збирання, тоді використовуйте Fuslogvw.exe, щоб дізнатися, як CLR знайшов цю стару копію.
Ганс Пасант

2
Подивіться на папку для сміття вашого проекту і переконайтеся, що у dll вашого конфлікту конфлікт у назві. Просто видаліть його, а потім відновіть рішення. Це працювало для мене.
coggicc

11
"або одна з її залежностей" - це та частина, яка мене справді дратує. Якщо він не може завантажити "одну зі своїх залежностей", помилка повинна сказати, яку "одну з її залежностей" неможливо завантажити. Нинішня форма є марною, вона також може сказати, що не може завантажувати речі
Пол Маккарті

Відповіді:


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

  2. Може бути папка виводу, де всі проекти будують свої збірки, має стару версію єдності.

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


6
Де файл журналу FuseLogVw
Stiger

1
Щоб уникнути необхідності пошуку файлу журналу, ви можете вказати користувальницький шлях журналу: Налаштування, встановіть прапорець Увімкнути спеціальний шлях журналу, введіть спеціальний шлях журналу, оновіть.
RedGreenCode

82

Відкрийте менеджер IIS

Виберіть Пул програми

потім виберіть пул, який ви використовуєте

перейти до розширених налаштувань (праворуч)

Змініть прапор Enable 32-bit application false на true.


IIS -> виберіть кожен ApplicationPool -> Основні налаштування -> перевірте, чи вибрано останню основу у спадному меню ".NET Framework version"
Мартін

Ви також можете клацнути правою кнопкою миші ваш проект у VS. і видаліть перевагу 32-бітової галочки
eran otzap

Дякую. Це спрацювало. Добре, що в моєму випадку це було правдою, просто для спробу. Я зробив це помилковим, і воно спрацювало.
meekash55

Коли я об'єднав проект з одного сервера на інший, цей прапор знову був помилковим, дякую за рішення!
Appsum Solutions

69

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

Я думаю, що це змушує Visual Studio перезавантажувати рішення та всі проекти, повторно перевіряючи залежності в процесі.


33
Якщо ви не вірите, що це спрацює, принаймні, спробуйте. Я сам не міг повірити в це, поки не зробив.
Бен Кулл

3
😍😍😍😍😍😍😍😍😍😍😍 Працював для мене
Devidas M Das

48

Спробуйте очистити папки налагодження та випустити у своєму рішенні. Потім вийміть і знову додайте єдність.


3
Ця проблема може бути викликана багатьма речами ... ваше рішення вирішило мої проблеми, а може вирішити і інші.
Скотт Ріппей

1
@ScottRippey Це працювало для мене. Спочатку я видалив усі .pdb файли, а потім перезавантажив свій проект та відновив його.
botenvouwer

21

На 99% не вдалося завантажити файл чи збірку або одна з проблем залежності викликана залежностями! Я пропоную вам виконати наступні кроки:

  1. Завантажте Уокер-залежність від http://www.dependencywalker.com/

  2. Запустіть ходунок залежності і відкрийте dll (у моєму випадку NativeInterfaces.dll)

  3. Ви можете побачити один або кілька dll з помилкою в червоному Помилка відкриття файлу ...

  4. Це означає, що цей dll відсутній у вашій системі; в моєму випадку назва dllMSVCR71.DLL

  5. Ви можете завантажити miss goll з Google і скопіювати в потрібний шлях (у моєму випадку c:\windows\system32)

  6. Після цього потрібно зареєструвати новий dll в GAC (Global Assembly Cache): відкрити DOS-термінал і написати:

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


22
Ходовий залежність чудовий, але копіювання випадкових DLL-файлів з Інтернету в Windows ... менш чудово. Краще спробувати знайти інсталятора, який надає ті dlls.
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

Приклад виходу: введіть тут опис зображення


Не працює з виданнями спільноти Visual Studio
Draex_

Я вважаю, що має бути інше питання, не пов’язане з виданням Visual Studio. Я протестував розширення на видання VS 2017 та VS 2015 Community. Насправді він був розроблений за допомогою видання VS 2017 Community.
marss19

Ага. Чи встановлені інші розширення? На цій сторінці написано, що DGML не підтримується у спільноті VS: msdn.microsoft.com/en-us/library/hh871439.aspx#VersionSupport
Draex_

1
У виданні спільноти немає інструментів архітектури, але редактор DGML сам доступний. Ви можете встановити його, вибравши "Встановити редактор DGML" у розділі "Індивідуальні компоненти" -> "Інструменти коду" через інсталятор Visual Studio -> Змінити
marss19

11

скріншотКлацніть правою кнопкою миші на досліднику рішень проект (не рішення), на вкладці збірки виберіть ціль платформи: "Будь-який процесор".


Після перевірки пулу програм "Включити 32-розрядні програми" було встановлено значення "Неправильно", але ціль моєї платформи - x86. Змінивши його на будь-який процесор чи x64, виправлено мою проблему.
Кіт Кеттерер

11

Відповідь Juntos правильна, але слід також врахувати:

Для єдності 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. Goto project Properties >> Build
  5. Змініть конфігурацію до випуску
  6. Початок налагодження (F5)

1), 2)

Клацніть правою кнопкою миші назву рішення

4), 5)

Змініть конфігурацію до випуску

Сподіваюсь, це теж допоможе вам.


5
  • Перейти: Рішення -> Пакет
  • Клацніть на вкладку « Додатково » (Знайти нижче сторінки)
  • Додайте dll до додаткових збірок (таким чином ми можемо додавати зовнішні dll у спільну точку).

7
У мене немає проекту "Рішення -> пакет" в моєму проекті
VS2010

5

Не впевнений, чи це може допомогти.

Перевірте, чи збігаються ім'я збірки та простір імен за замовчуванням у проспектах у ваших збірках. Це вирішило мою проблему, яка спричинила ту саму помилку.


Відмінно! Ім'я файлу DLL і простір імен були різними, я скопіював простір імен і перейменував свій dll.
Анонімний хан

5

У моєму випадку в папці bin був нереференційний DLL під назвою Unity.MVC3, я намагався шукати будь-яку посилання на це у візуальній студії без успіху, тому моє рішення було таким простим, як видалити цей dll з папки bin.


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

У мене була така ж проблема, я вирішив її за допомогою наведених нижче інструкцій:

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

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


2

Ви повинні видалити файл appname.dll зі своєї вихідної папки. Очищення налагодження та звільнення папок. Відновіть і скопіюйте для виведення регенерований файл DLL.


2

Я "Встановлюю як проект запуску" розвантажену / необгрунтовану бібліотеку / проект

Потім розгорнув його.

Це спрацювало!

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


2

Інша можлива причина: переконайтеся, що ви випадково не дали обом проектам однакову назву збірки у властивостях проекту.


На це знадобилися години, щоб розібратися .... Я випадково назвав мій тестовий проект підрозділу тим же ім'ям, що і основний проект, тому dll-тестовий проект dll повинен був перезаписати проект dll
Iannazzi

2

Моє рішення для .NET 4.0, використовуючи Enterprise Library 5, було додати посилання на:

Microsoft.Practices.Unity.Interception.dll


2

Слідкуйте за суперечливими посиланнями. Навіть після очищення та відновлення конфліктні посилання все одно спричинять проблеми. Моя проблема була між AForge та Accord. Я видалив обидві посилання та повторно додав посилання, повторно вибравши конкретне посилання (зокрема, у моєму випадку, лише Accord).



2

У моєму випадку жодна із запропонованих відповідей не спрацювала.

Ось що для мене спрацювало:

  1. Видаліть посилання
  2. Перейменуйте DLL
  3. Імпортуйте посилання ще раз

Другий крок був важливим, мабуть, тому що без нього не обійшлося.


2

Спробуйте перевірити, чи для властивості "Копіювати в локальну" для посилання встановлено значення "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>

Змінено на вищесказане і вуаля! Все працювало знову.


1

якщо ви отримуєте це повідомлення про помилку, відкриваючи програму на вашому windows xp, це означає, що спочатку ви встановили цей додаток через те, що він не працює без net Framework 4 та пакета оновлення 3. ви встановили і те, і знову, ви отримуєте цю помилку, тому вам слід перевстановити цю програму ще раз, але спочатку видаліть додавання та видалення

якщо це не працює, не зловживайте мною. Я також молодший

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.