Не удалось загрузить файл или сборку или одну из ее зависимостей. В доступе отказано. Вопрос случайный, но после того, как это происходит один раз, оно продолжается
Я нашел много информации об этой ошибке: "ОШИБКА: Не удалось загрузить файл или сборку *.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.