Не вдалося завантажити файл або збірку або одну із залежностей. Доступ заборонено. Питання є випадковим, але після того, як це трапиться один раз, воно продовжується


81

Я знайшов багато інформації про цю помилку: 'ПОМИЛКА: Не вдалося завантажити файл або збірку' .dll 'або одну із залежностей. Доступ заборонено.' Але я не знайшов відповіді, характерної для мого сценарію. Мій сайт розміщений на 6 різних виробничих серверах, лише на одному сервері я стикаюся з цією проблемою. Проблема є випадковою, але після того, як це трапиться один раз, вона триває доти, доки сайт не буде перекомпільовано, виконавши невелику модифікацію у файлі web.config (я знаю хитрість, після модифікації в web.config перекомпілює веб-програму) і запуск сайту на цьому сервері робочий. Вчора випуск відтворювався після місячного періоду роботи. Ми не можемо дозволити собі це питання на виробництві.
Подробиці випуску:

Помилка серверу в програмі '/' ____________________________________ Не вдалося завантажити файл або збірку 'MainCore.DbImpl, Версія = 0.0.0.0, Культура = нейтральна, PublicKeyToken = нуль' або одна із залежностей. Доступ заборонено. Опис: Під час виконання поточного веб-запиту сталося необроблене виняток. Будь ласка, перегляньте трасування стека, щоб отримати додаткову інформацію про помилку та про те, звідки вона виникла в коді.

Деталі винятків: System.IO.FileLoadException: Не вдалося завантажити файл або збірку 'MainCore.DbImpl, Версія = 0.0.0.0, Культура = нейтральна, PublicKeyToken = null' або одна із залежностей. Доступ заборонено.

Помилка джерела: під час виконання поточного веб-запиту було створено необроблений виняток. Інформацію про походження та місцезнаходження винятку можна визначити, використовуючи наведений нижче стек винятків.

Трасування навантаження збірки: Наступна інформація може бути корисною для визначення того, чому не вдалося завантажити збірку 'MainCore.DbImpl, Версія = 0.0.0.0, Культура = нейтральна, PublicKeyToken = null'.

WRN: Журнал прив'язки збірки вимкнено. Щоб увімкнути журналювання помилок прив'язки збірки, встановіть значення реєстру [HKLM \ Software \ Microsoft \ Fusion! EnableLog] (DWORD) на 1. Примітка. З реєстрацією помилок прив'язки збірки пов'язано певне покарання за продуктивність. Щоб вимкнути цю функцію, видаліть значення реєстру [HKLM \ Software \ Microsoft \ Fusion! EnableLog].

Трасування стека:

[FileLoadException: Не вдалося завантажити файл або збірку 'MainCore.DbImpl, Версія = 0.0.0.0, Культура = нейтральна, PublicKeyToken = null' або одна із залежностей. Доступ заборонений.] ... DbImpl.Event.TTCEventController.GetEventFields (Int32 eventId) +0 WebSuite.SportChannel.ModelImpl.TTCModelController.AddEventFieldList (XmlElement eventNode, ITTCEventController, IntI, Player, IntI \ ModelImpl \ Ttc \ TTCModelController.cs: 171 ... ModelImpl.TTCModelController.GetLatestFourTourSchedulesXml () в ... root \ SportChannel \ ModelImpl \ Ttc \ TTCModelController.cs: 283 ... WebRoot.User. , EventArgs e) +491 System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, Object o, Object t, EventArgs e) +25 System.Web.Util.
____________________________________

Інформація про версію: Microsoft .NET Framework Версія: 2.0.50727.5446; Версія ASP.NET: 2.0.50727.5420


Цю проблему спричинило завантаження нової версії dll?
nunespascal

Ніяких змін, однакова стара DLL на всіх серверах, нічого не змінюється
khawarPK

Стара та сама версія MainCore.DbImpl.dll на всіх серверах, нічого не завантажувала та не змінювала.
khawarPK

Спробуйте очистити / видалити тимчасові файли ASP.Net наступного разу, коли це станеться, bcoz для їх очищення вам може знадобитися перезапустити IIS.
Фуркан Хамеді

як уникнути виникнення цієї проблеми наступного разу на цьому сервері ??
khawarPK

Відповіді:


51

Для мого сценарію я виявив, що у файлі web.config є вузол ідентифікації.

<identity impersonate="true" userName="blah" password="blah">

Коли я видалив параметри userName та пароль з вузла, він почав працювати.

Іншим варіантом може бути те, що вам потрібно переконатись, що вказане ім’я користувача має доступ для роботи з тими папками "Тимчасові файли ASP.NET", знайденими в різних папках C: \ Windows \ Microsoft.NET \ Framework {version}.

Сподіваючись, це допомагає комусь іншому!


2
Для мене локальний запуск рішення означає повне видалення вузла ідентифікації з web.config, але розгортання його на робочих серверах вимагає уособлення, тому вузол ідентифікації повинен бути доданий. Дивіться мою відповідь тут для більш детальної інформації
bkwdesign

3
Я додав користувача, що видає себе за себе, до локальної групи під назвою IIS_IUSRS, замість того, щоб намагатись точно з’ясувати, яку з «різних папок фреймворку» використовувати.
Андреас Янссон,

Не забувайте, що видавання себе за іншу особу можна здійснити за допомогою коду (без web.config), у моєму випадку користувач (анонімний вхід) був збережений у браузері Chrome. Довелося перезапустити Chrome і переглянути веб-сайт, щоб ввести мої облікові дані користувача.
Володимир Котило

36

Виникла та сама проблема, виправлена ​​із встановленням параметра «Увімкнути 32-розрядні програми» на «істина» (у розширених налаштуваннях пулу додатків iis).


Ця відповідь разом із рішенням Лав Чопра спрацювала для мене.
Справа 303

Чудова відповідь! Якщо, як і я, ви намагаєтесь опублікувати в Azure і отримуєте таку ж помилку, перейдіть до своєї програми на порталі Azure, перейдіть до Налаштування програми та виберіть параметр «64-біт» для параметра «Платформа».
MV23

@ MV23 Чому 64-розрядна версія? Чому це допомагає?
nmit026

26

Моє рішення таке:

Я не знайшов кореневу папку під C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files.

Google сказав мені , що це може бути проблема дозволу від поточного користувача, то я виявив , що є поточна Ідентичність: IIS APPPOOLв несправному сервери , де інша частина сервера має посвідчення: NT AUTHORITY\NETWORK SERVICE.

Потім я змінив поточну особу з IIS APPPOOLна NT AUTHORITY\NETWORK SERVICE.

Звідси я виявив, що скидання веб-програми відновлює тимчасовий кеш ASP.NET, вирішуючи проблему.


Будь-яке рішення для тієї ж проблеми зі збіркою C1.Web.Wijmo.Controls.4? отриманняCould not load file or assembly 'C1.Web.Wijmo.Controls.4, Version=4.0.20163.250, Culture=neutral, PublicKeyToken=9b75583953471eea' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
Праджвал Бхат

@Bhat: Твоя - це зовсім інша проблема. Просто порівняйте повідомлення про помилки.
JensG

22

Всім, хто пробував більшість рішень і все ще має проблеми.

Моє рішення відрізняється від інших, яке знаходиться внизу цієї публікації, але перед тим, як спробувати, переконайтеся, що вичерпали наступні списки. Безумовно, я спробував усі, але безрезультатно.

  1. Перекомпілюйте та передислокуйте з нуля, не оновлюйте існуючу програму. ТАК Відповідь

  2. Надати IIS_IUSRS повний доступ до каталогу "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Тимчасові файли ASP.NET"

    Майте на увазі фреймворкову версію, яку ви використовуєте. Якщо ваша програма використовує себе за іншу особу, використовуйте цю особу замість IIS_IUSRS

  3. Видалити весь вміст каталогу "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Тимчасові файли ASP.NET" .

    Майте на увазі фреймворк, яку ви використовуєте

  4. Змініть ідентифікатор AppPool, який використовує ваш додаток, з ApplicationatonPoolIdentity на NetworkService.

    IIS> Пули програм> Виберіть поточний пул програм> Додаткові налаштування> Ідентифікація.

    ТАК Відповідь (будь-ласка, відновіть за замовчуванням, якщо він не працює)

  5. Перевірте сумісність версії IIS та версії AppPool .NET із вашим додатком. Дуже застосовний до першого розгортання. ТАК Відповідь

  6. Перевірте конфігурацію видавання себе за іншу особу, якщо це можливо. ТАК Відповідь

Моє рішення:

Я виявив, що певні антивірусні програми активно блокують компіляції бібліотек DLL у каталозі "Тимчасові файли ASP.NET" , я - McAfee, ІТ-спеціалісти не повідомили мене про встановлення.

Відповідно до порад експертів McAfee та Microsoft, вам потрібно виключити каталог "Тимчасові файли ASP.NET" у режимі реального часу.

Джерела:

Не вимикайте Антивірус, оскільки він виконує лише свою роботу. Не копіюйте вручну відсутні файли DLL у каталозі \ Тимчасові файли ASP.NET {назва проекту}, оскільки це касета.


Очищення тимчасових файлів ASP.Net спрацювало для мене, хоча помилка посилалася (неодноразово) на мій локальний смітник. Дуже заплутано.
dudeNumber4

1
Щиро дякую ... Я борюся проти цієї настирливої ​​помилки майже два тижні. Коли я вимкнув свій антивірус (Безкоштовний антивірус BitDefender), все знову працює нормально.
Александр Перес

1
приблизно кожні 6 місяців у мене відбувається неправильне розгортання розробників, яке повертає мене до тієї самої ТАКОЇ відповіді - чудова запис @Yorro! Знову ж таки, незважаючи на те, що це справді виявилося тим, що моєму користувачеві, що видає себе за іншу особу, потрібен доступ до каталогу тимчасових файлів ASP.NET, я, здавалося, не дійшов до помилки, поки не видалив свою програму з IIS (а не базові файли) і повторно додав файл додаток назад до IIS.
bkwdesign

У моєму випадку я виявив, що McAfee блокує доступ до DLL-файлів мого додатка .Net, як це видно з журналів McAfee. Мені довелося зайти в "Захист доступу" від McAfee і змінити "Максимальний захист від шпигунських програм". Потім видаліть перевірку Блокувати для пункту під назвою «Заборонити всім програмам запускати файли з папки Temp». Це можна налаштувати замість того, щоб вимкнути, що краще. Подивіться в AccessProctectionLog.txt, щоб побачити повідомлення, якщо вони блокують або повідомляють. Розташування журналу знаходиться на вкладці Звіти.
Пол Сифретт

Я отримую помилку з використанням IIS Expresss в Windows Vistadevelopment environment . Те саме питання про AppPools .
Kiquenet

5

Якщо ви використовуєте себе за іншу особу, обов’язково надайте дозволи, включаючи дозвіл на запис і зміну відповідного облікового запису користувача в такій папці:

C:\Users\[username]\AppData\Local\Temp\Temporary ASP.NET Files

Мені не вистачало дозволу на модифікацію, тому саме додавання дозволів за замовчуванням для мене не працювало.


Я виконував лише ці кроки, замість більш складних у вибраній відповіді - і це одне вирішило.
Веверке

Це спрацювало і у мене. Я використав монітор процесів Sysinternal від Technet, щоб знайти заблоковану папку, згадану в папці "Тимчасові файли ASP.NET". У моніторі процесів ви вимикаєте все, крім кнопки "Діяльність файлової системи", а потім можете шукати "ДОСТУП ЗАБОРОНЕНО".
Fordy

4

Якщо проблема все ще стикається, спробуйте наступне:

Відкрийте менеджер IIS -> Пули програм -> виберіть пул програм -> Попереднє налаштування -> У розділі «Модель процесу» встановіть параметр «Завантажити профіль користувача» як True

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


Ця відповідь разом із рішенням Fragment спрацювала для мене.
Справа 303

4

Я вважаю, що витратив 1 день на дослідження, і це те, з чим я вийшов.

Вам потрібно додати користувача, який видає себе за іншу особу, у папку налагодження вашого рішення, оскільки Framework спробує отримати доступ до DLL з цього місця та помістити її в тимчасову папку Asp.Net

Отже, в основному виконайте ці 2 кроки

  1. Дайте дозвіл тимчасовій папці Asp.Net під C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Filesі переконайтеся, що користувач, якого ви додаєте сюди, той самий, що ви використовуєте під час видавання себе за іншу особу.

  2. Додайте користувача, що видає себе за іншу особу, у папку налагодження вашого рішення SoSySolutionPath .. \ bin \ Debug

Це має спрацювати


4

Перейдіть до IIS -> Пул програм -> Додаткові налаштування -> Увімкнути 32-розрядні програми


Ти красуня !! Врятував мене цілий світ проблем
Мерфібро2,

3

У мене була та ж проблема, виправлена ​​шляхом відновлення та повторного розгортання ВСІХ файлів DLL залежних


3

У моєму випадку це було пов’язано з функцією захисту доступу мого антивірусу (McAfee). Це, очевидно, блокувало доступ до цього файлу, оскільки така помилка.

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


Мені довелося зайти в "Захист доступу" від McAfee і змінити "Максимальний захист від шпигунських програм". Потім видаліть перевірку Блокувати для пункту під назвою «Заборонити всім програмам запускати файли з папки Temp». Це можна налаштувати замість того, щоб вимкнути, що краще.
Пол Сифретт

2

Перевірте налаштування IIS. Я використовую IIS 7.5 із 32- або 64-розрядною компіляцією в рамках .NET. Якщо у вас є програма, яка використовує 32-розрядний режим, переконайтеся, що ввімкнено App Pool, щоб мати змогу використовувати 32-розрядні інструкції. В іншому випадку, здається, нічого не працює, незалежно від того, наскільки ви встановили безпеку або сильний знак DLL.


2

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

Додано ccs \ HJKWeb як список користувачів мого нового сервера.

  <authentication mode="Windows" />
        <identity impersonate="true" password="******" userName="ccs\HJKWeb" />

2

Для мене працював наступний хак; Перейдіть до IIS -> Пули програм -> Додаткові параметри -> Модель процесу -> Ідентичність змінено з вбудованого облікового запису (ApplicationPoolIdentity) на Спеціальний обліковий запис (Користувач мого домену)


1

У моєму випадку я не використовував себе за іншу особу. Моє рішення було надати повний доступ до мого каталогу проекту для групи користувачів "IIS_IUSRS".



1

Я зіткнувся з цією проблемою, і виявилося, що вказаний пакет / збірка шифрується Windows. Це сталося тому, що моя компанія застосувала політику, згідно з якою папка «Мої документи» повинна бути зашифрована, а мої рішення Visual Studio знаходились у цьому каталозі.

Я міг вручну перейти до властивостей файлу / каталогу в Провіднику Windows і вимкнути шифрування. Але в моєму випадку це було тимчасовим рішенням, оскільки мережева політика врешті-решт змінить його назад. Я перевів своє рішення VS в інше незашифроване місце.


1

У моєму випадку я скопіював службу з одного сервера на інший, не виконавши належного розгортання з Visual Studio. Довга історія.

У будь-якому випадку, я налаштував усі відповідні дозволи NTFS і ще, але все одно не вдалося завантажити основну бібліотеку DLL для служби.

Я виправив це, перейменувавши відповідний файл service.pdb на щось інше.

Наприклад, ось моя папка bin: \bin\ service.dll service.dll.config service.pdb я перейменував service.pdb у zzservice.pdb, а потім service.dll завантажився нормально.


Можливо, це усунуло вашу проблему, але не пояснює причину
котиться

1

Якщо ви отримали DLL не вдалося знайти замість відмови у доступі, переконайтесь, що встановлено відповідний VC ++ Redistributable


0

Я отримав цю помилку під керуванням VS. Виявилося, я відкрив рішення, не запустивши Visual Studio від імені адміністратора. Закриття Visual studio і запуск його знову як адміністратора, а потім відновлення вирішили це для мене.

Надія, що комусь допомагає.


0

У моєму випадку я використовував просту імітацію, і користувач уособлення мав проблеми з доступом до однієї з збірок проекту. Моє рішення:

  1. Шукайте повідомлення внутрішнього винятку, щоб визначити проблемну збірку.
  2. Змініть властивості захисту збірного файлу.

    а) Додайте обліковий запис користувача, який ви використовуєте для видавання себе, до імен групи та користувачів.

    b) Надайте цьому обліковому запису повний доступ до файлу збірки.

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