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

Я нашел много информации об этой ошибке: "ОШИБКА: Не удалось загрузить файл или сборку *.dll" или одну из его зависимостей. В доступе отказано. Но я не нашел ответа, характерного для моего сценария. Мой сайт разворачивается на 6 разных производственных серверах, только на одном сервере я столкнулся с этой проблемой. Проблема случайная, но после ее возникновения один раз она продолжается до тех пор, пока сайт не будет перекомпилирован, сделав небольшую модификацию в файле web.config(я знаю трюк, после изменения в web.config перекомпилировать веб-приложение) и сайт на этом сервере за работой. Вчера вопрос воспроизводился через один месяц работы. Мы не можем позволить себе эту проблему на производстве.
Подробнее о проблеме:

Ошибка сервера в приложении "/".      ____________________________________    Не удалось загрузить файл или сборку "MainCore.DbImpl, Version = 0.0.0.0, Culture = neutral, PublicKeyToken = null" или одну из его зависимостей. В доступе отказано.     Описание: Необработанное исключение возникло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительной информации об ошибке и ее возникновении в коде.

Сведения об исключении: System.IO.FileLoadException: не удалось загрузить файл или сборку 'MainCore.DbImpl, Version = 0.0.0.0, Culture = neutral, PublicKeyToken = null' или одну из его зависимостей. Доступ запрещен.

Ошибка источника:     Необработанное исключение было создано во время выполнения текущего веб-запроса. Информация о происхождении и местоположении исключения может быть идентифицирована с использованием трассы стека исключений ниже.

След загрузки сборки. Следующая информация может быть полезна для определения того, почему сборка "MainCore.DbImpl, Version = 0.0.0.0, Culture = neutral, PublicKeyToken = null" не может быть загружена.

WRN: Регистрация привязки сборки отключена.     Чтобы включить ведение журнала сбоев сборки, установите значение реестра [HKLM\Software\Microsoft\Fusion! EnableLog] (DWORD) на 1.     Примечание. Существует некоторое ограничение производительности, связанное с протоколом сбоя привязки сборки.     Чтобы отключить эту функцию, удалите значение реестра [HKLM\Software\Microsoft\Fusion! EnableLog].

Трассировка стека:

[FileLoadException: не удалось загрузить файл или сборку MainCore.DbImpl, Version = 0.0.0.0, Culture = neutral, PublicKeyToken = null или одну из его зависимостей. В доступе отказано.]        ... DbImpl.Event.TTCEventController.GetEventFields(Int32 eventId) +0        WebSuite.SportChannel.ModelImpl.TTCModelController.AddEventFieldList(XmlElement eventNode, ITTCEventController ctrl, Int32 eventId, PlayerType stupidType) в... root\SportChannel\ModelImpl\Ttc\TTCModelController.cs: 171     ... ModelImpl.TTCModelController.GetLatestFourTourSchedulesXml() в... root\SportChannel\ModelImpl\Ttc\TTCModelController.cs: 283        ... WebRoot.UserControls.HeadlinesTab.Page_Load (отправитель объекта, EventArgs e) +491        System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +25        System.Web.Util.CalliEventHandlerDelegateProxy.Callback(отправитель объекта, EventArgs e) +42        System.EventHandler.Invoke(отправитель объекта, EventArgs e) +0        System.Web.UI.Control.OnLoad(EventArgs e) +132        System.Web.UI.Control.LoadRecursive() +66        System.Web.UI.Control.LoadRecursive() +191        System.Web.UI.Control.LoadRecursive() +191        System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2428
     ____________________________________

Информация о версии: Microsoft.NET Framework Версия: 2.0.50727.5446; Версия ASP.NET: 2.0.50727.5420

Ответ 1

Мое решение таково:

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

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

Затем я изменил Current Identity с IIS APPPOOL на NT AUTHORITY\NETWORK SERVICE.

Отсюда я обнаружил, что перезагрузка веб-приложения восстанавливает временный кэш ASP.NET, решая проблему.

Ответ 2

В моем сценарии я обнаружил, что в файле web.config есть идентификатор node.

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

Когда я удалил параметры userName и пароля из node, он начал работать.

Другим вариантом может быть то, что вам нужно убедиться, что указанное имя пользователя имеет доступ к работе с папками "Временные файлы ASP.NET", находящимися в папках C:\Windows\Microsoft.NET\Framework {version}.

Надеясь, что это поможет кому-то еще!

Ответ 3

Была та же проблема, исправленная с установкой параметра "Включить 32-разрядные приложения" до "true" (в дополнительных настройках пула приложений iis).

Ответ 4

Другим, кто пробовал большинство решений и все еще имел проблемы.

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

  • Перекомпилируйте и передислоцируйте с нуля, не обновляйте существующее приложение. SO ответ

  • Предоставьте полный доступ IIS_IUSRS к каталогу "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Временные файлы ASP.NET"

    Помните о версии фреймворка, которую вы используете. Если ваше приложение использует олицетворение, используйте этот идентификатор вместо IIS_IUSRS

  • Удалить все содержимое каталога "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files".

    Имейте в виду версию фреймворка, которую вы используете

  • Измените идентификатор AppPool, который использует ваше приложение, от ApplicatonPoolIdentity до NetworkService.

    IIS > Пулы приложений > Выберите текущий пул приложений > Предварительные настройки > Идентификация.

    SO ответ (пожалуйста, восстановите по умолчанию, если он не работает)

  • Проверьте совместимость версии IIS и версии AppPool.NET с вашим приложением. Высокоприменимо для развертывания в первый раз. SO ответ

  • Проверьте конфигурацию олицетворения, если это применимо. SO ответ

Мое решение:

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

Согласно рекомендациям экспертов McAfee и Microsoft, вы должны исключить каталог "Временные файлы ASP.NET" в режиме реального времени.

Источники:

Не отключайте Антивирус, потому что он выполняет свою работу. Не вручную копируйте отсутствующие DLL файлы в каталог \Temporary ASP.NET Files {имя проекта}, потому что это касается записи каналов.

Ответ 5

Если вы используете олицетворение, не забудьте предоставить разрешения, в том числе написать и изменить права на соответствующую учетную запись пользователя в следующей папке:

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

Мне не было разрешения на изменение, поэтому просто добавление разрешений по умолчанию для меня не работало.

Ответ 6

Если вы все еще сталкиваетесь с проблемой, попробуйте следующее:

Откройте диспетчер IIS → Пулы приложений → выберите свой пул приложений → Предварительная настройка → В разделе "Модель процесса" установите параметр "Загрузить профиль пользователя" как "Истина"

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

Ответ 7

У меня была та же проблема, исправленная путем перестроения и повторного развертывания файлов ALL зависимых Dll

Ответ 8

Перейдите в IIS → Пул приложений → Предварительные настройки → Включить 32-разрядные приложения

Ответ 9

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

Ответ 10

В моем случае это было связано с функцией защиты доступа моего антивируса (McAfee). Очевидно, что он блокировал доступ к этому файлу, как к такой ошибке.

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

Ответ 11

Я считаю, что я потратил впустую, как 1 день на исследование этого, и это то, с чем я пришел.

Вам нужно добавить пользователя-олигарха в папку Debug вашего решения, так как Framework попытается получить доступ к DLL из этого места и поместить его в папку Temporary Asp.Net.

Итак, в основном следуйте этим двум шагам

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

  • Добавьте пользователя-олигарха в папку Debug вашего решения YourSolutionPath..\bin\Debug

Это должно работать

Ответ 12

Я не использовал олицетворение в моем случае. Мое решение состояло в том, чтобы предоставить полный доступ к моему каталогу проектов для группы пользователей "IIS_IUSRS".

Ответ 13

 Go to run  : ctrl + R
 Type : %temp%

удалить все файлы и папки

 Rebuild Project.
 done!

Ответ 14

Я столкнулся с этой проблемой, и оказалось, что связанный пакет/сборка зашифровывается Windows. Это произошло потому, что моя компания внедрила политику, требующую шифрования папки My Documents, и мои решения Visual Studio оказались под этим каталогом.

Я мог бы вручную перейти в свойства файла/каталога в проводнике Windows и отключить шифрование. Но в моем случае это временное решение, так как сетевая политика в конечном итоге изменит его. Я запустил перемещение своего VS-решения в другое незашифрованное местоположение.

Ответ 15

В моем случае я скопировал службу с одного сервера на другой без надлежащего развертывания из Visual Studio. Длинная история.

В любом случае, я установил все соответствующие разрешения NTFS и еще что-то еще, но он по-прежнему не мог загрузить основную DLL для службы.

Я исправил его, переименовав соответствующий файл service.pdb в другое.

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

Ответ 16

Я получил эту ошибку от VS. Оказалось, что я открыл решение без запуска Visual Studio в качестве администратора. Закрытие Visual Studio вниз и запуск его снова, как admin, а затем восстановление для меня решило.

Надеюсь, что это поможет кому-то.

Ответ 17

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

  • Ищите сообщение внутреннего исключения, чтобы идентифицировать проблемную сборку.
  • Измените свойства безопасности файла сборки.

    a) Добавьте учетную запись пользователя, которую вы используете для олицетворения для имен групп и пользователей.

    b) Дайте этой учетной записи пользователя полный доступ к файлу сборки.

Ответ 18

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

Добавлен ccs\HJKWeb как список пользователей моего нового сервера.

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

Ответ 19

Если вы получили DLL, которую не удалось найти, а не запретили доступ, убедитесь, что у вас установлен соответствующий VC++ распространяемый дистрибутив.

Ответ 20

Для меня следующий хак сработал; Перейдите в IIS → Пулы приложений → Расширенные настройки → Модель процесса → Идентификация изменена со встроенной учетной записи (ApplicationPoolIdentity) на Настраиваемую учетную запись (Мой пользователь домена)

Ответ 21

Для моего приложения WCF Platform Target было установлено значение x64, и я опубликовал и создал его сайт в IIS и получил эту ошибку. Я изменил Platform Target на Any CPU, опубликовал и заменил опубликованные на сайте файлы. Это все еще давало ту же ошибку. Ошибка исчезла, когда я создал новый сайт с новым именем и поместил тот же опубликованный с любым процессором, и это сработало. Похоже, замены файлов было недостаточно.

Ответ 22

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