无法加载文件或程序集或其依赖项之一。访问被拒绝。问题是随机的,但发生一次后,它会继续
Posted
技术标签:
【中文标题】无法加载文件或程序集或其依赖项之一。访问被拒绝。问题是随机的,但发生一次后,它会继续【英文标题】:Could not load file or assembly or one of its dependencies. Access is denied. The issue is random, but after it happens once, it continues 【发布时间】:2012-06-21 05:05:55 【问题描述】:我已经找到了大量关于此错误的信息:“错误:无法加载文件或程序集“*.dll”或其依赖项之一。访问被拒绝。 但我还没有找到特定于我的场景的答案。 我的站点部署在 6 台不同的生产服务器上,仅在一台服务器上我面临这个问题。这个问题是随机的,但是在它发生一次之后,它会一直持续到通过在 web.config 文件中进行小修改来重新编译站点(我知道技巧,在 web.config 中修改后重新编译 Web 应用程序)并且该服务器上的站点启动在职的。 昨天,经过一个月的工作,问题正在重现。 我们无法承受生产中的这个问题。 问题详情:
“/”应用程序中的服务器错误。 ____________________________________ 无法加载文件或程序集“MainCore.DbImpl,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。访问被拒绝。 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.IO.FileLoadException:无法加载文件或程序集“MainCore.DbImpl,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。访问被拒绝。
来源错误: 在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常来源和位置的信息。
程序集加载跟踪:以下信息有助于确定为什么无法加载程序集“MainCore.DbImpl, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null”。
警告:程序集绑定日志记录已关闭。 要启用程序集绑定失败日志记录,请将注册表值 [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 愚蠢类型)在 ...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,对象 o,对象 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
【问题讨论】:
这个问题是不是上传新版本的dll引起的? 无变化,所有服务器上的旧 dll 相同,没有任何变化 所有服务器上的 MainCore.DbImpl.dll 旧版本相同,没有上传或更改任何内容。 下次发生这种情况时尝试清理/删除临时 ASP.Net 文件,因为要清理它们,您可能需要重新启动 IIS。 我如何避免下次在此服务器上发生此问题?? 【参考方案1】:我的解决方法如下:
我没有在C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files
下找到 root 文件夹。
Google 告诉我这可能是针对当前用户的权限问题,然后我发现我在故障服务器中有一个当前身份:IIS APPPOOL
,而服务器的其余部分具有当前身份:NT AUTHORITY\NETWORK SERVICE
。
然后我将当前身份从 IIS APPPOOL
更改为 NT AUTHORITY\NETWORK SERVICE
。
从这里,我发现重置 Web 应用程序会重建临时 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:你的问题完全不同。只需比较错误消息。【参考方案2】:
对于我的场景,我发现web.config文件中有一个身份节点。
<identity impersonate="true" userName="blah" password="blah">
当我从节点中删除用户名和密码参数时,它开始工作。
另一个选项可能是您需要确保指定的用户名有权使用在各种 C:\Windows\Microsoft.NET\Frameworkversion 文件夹中找到的那些“临时 ASP.NET 文件”文件夹。
希望这对其他人有所帮助!
【讨论】:
对我来说,本地运行解决方案意味着从 web.config 中完全删除身份节点,但将其部署到生产服务器需要模拟,因此必须添加身份节点。 See my answer here for more detail 我将模拟用户添加到名为 IIS_IUSRS 的本地组中,而不是试图准确找出要使用的“各种框架文件夹”中的哪个。 不要忘记模拟可以通过 code(没有 web.config)来完成,在我的例子中,用户(匿名登录)已保存在 Chrome 浏览器中。必须重新启动 Chrome 并重新访问网站以输入我的用户凭据。【参考方案3】:致所有尝试了大部分解决方案但仍然遇到问题的人。
我的解决方案与其他解决方案不同,位于本文底部,但在您尝试之前,请确保您已用尽以下列表。可以肯定的是,我已经尝试了所有这些方法,但都无济于事。
从头开始重新编译和重新部署,不要更新现有的应用程序。 SO Answer
授予 IIS_IUSRS 对目录“C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files”的完全访问权限
记住您使用的框架版本。如果您的应用使用模拟,请使用该身份而不是 IIS_IUSRS
删除目录“C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files”的所有内容。
记住你使用的框架版本
将您的应用正在使用的 AppPool 的标识从 ApplicatonPoolIdentity 更改为 NetworkService。
IIS > 应用程序池 > 选择当前应用程序池 > 高级设置 > 身份。
SO Answer(如果不行请恢复默认)
验证 IIS 版本和 AppPool .NET 版本与您的应用程序的兼容性。高度适用于首次部署。 SO Answer
如果适用,请验证模拟配置。 SO Answer
我的解决方案:
我发现某些杀毒软件正在积极阻止目录“Temporary ASP.NET Files”中的DLL编译,我的是McAfee,IT人员没有通知我安装.
根据 McAfee 专家和 Microsoft 的建议,您需要在实时扫描中排除目录“Temporary ASP.NET Files”。
来源:
McAfee Support Forum Microsoft Support Asp.Net Forum不要禁用防病毒软件,因为它只是在发挥作用。不要手动复制目录 \Temporary ASP.NET Filesproject name 中丢失的 DLL 文件,因为那是管道胶带。
【讨论】:
清除临时 ASP.Net 文件对我有用,即使该错误仅引用(重复)我的本地 bin。非常混乱。 非常感谢...我已经与这个恼人的错误作斗争了将近两个星期。当我禁用我的防病毒软件(BitDefender 免费防病毒软件)后,一切正常。 每 6 个月左右我有一个行为不端的开发部署,这让我回到了同样的答案 - 很棒的文章 @Yorro!。同样,即使最终我的模拟用户需要访问 Temporary ASP.NET Files 目录,我似乎也没有遇到错误,直到我从 IIS(而不是底层文件)中删除了我的应用程序并重新添加了应用程序回到 IIS。 就我而言,我发现 McAfee 阻止了对我的 .Net 应用程序 dll 的访问,如 McAfee 的日志中所示。我不得不进入 McAfee 的“访问保护”并更改“反间谍软件最大保护”。然后删除名为“阻止所有程序运行临时文件夹中的文件”的项目的阻止检查。这可以配置而不是禁用更好。查看 AccessProctectionLog.txt 以查看消息是否被阻止或报告。日志的位置在报告标签页上。 我在development environment
中使用 IIS Expresss 时出错。关于 AppPools 的同样问题。【参考方案4】:
遇到了同样的问题,通过将参数 “启用 32 位应用程序” 设置为 “true”(在 iis 应用程序池的高级设置中)修复。 p>
【讨论】:
这个答案以及 Love Chopra 的 solution 对我有用。 很好的答案!如果像我一样,您尝试发布到 Azure 并遇到相同的错误,请转到 Azure 门户上的应用程序,转到应用程序设置并为“平台”设置选择“64 位”选项。 @MV23 为什么是 64 位?为什么会有帮助? 我遇到了同样的错误,我不得不将“启用 32 位应用程序”设置为“假”,因为我的应用程序是 64 位的【参考方案5】:如果您使用模拟,请务必在以下文件夹中授予相关用户帐户的权限,包括 write 和 modify 权限:
C:\Users\[username]\AppData\Local\Temp\Temporary ASP.NET Files
我缺少修改权限,这就是为什么只添加默认权限对我不起作用的原因。
【讨论】:
我只遵循了这些步骤,而不是所选答案中更复杂的步骤 - 仅此一项就解决了它。 这对我也有用。我使用来自Technet 的 Sysinternal 的进程监视器来查找被阻止的文件夹,即提到的“临时 ASP.NET 文件”文件夹。在进程监视器中,您关闭除“文件系统活动”按钮之外的所有内容,然后可以搜索“访问被拒绝”。【参考方案6】:我从 VS 运行时遇到此错误。结果我打开了一个解决方案,没有以管理员身份运行 Visual Studio。关闭 Visual Studio 并以管理员身份再次运行它然后重建为我解决了这个问题。
希望对某人有所帮助。
【讨论】:
【参考方案7】:在我的情况下,我没有使用模拟。我的解决方案是为用户组“IIS_IUSRS”授予对我的项目目录的完全访问权限。
【讨论】:
【参考方案8】:我遇到了同样的问题,已通过重建和重新部署 ALL Dependents Dll 文件修复
【讨论】:
【参考方案9】:检查 IIS 设置。我在 .NET 框架内使用带有 32 位或 64 位编译的 IIS 7.5。如果您有使用 32 位模式的应用程序,请确保启用应用程序池以能够使用 32 位指令。否则,无论您对 DLL 设置多少安全性或强签名,似乎都无法正常工作。
【讨论】:
【参考方案10】:就我而言,这是由于我的防病毒软件 (McAfee) 的访问保护功能所致。它显然阻止了对这个文件的访问,因为这样的错误。
我禁用了它并且解决方案运行了。您可能需要检查您可能正在运行的任何实用程序应用程序,这些应用程序可能会影响对某些文件的访问。
【讨论】:
我必须进入 McAfee 的“访问保护”并更改“反间谍软件最大保护”。然后删除名为“阻止所有程序运行临时文件夹中的文件”的项目的阻止检查。这可以配置而不是禁用更好。【参考方案11】:如果您仍然遇到问题,请尝试以下操作:
打开您的 IIS 管理器 -> 应用程序池 -> 选择您的应用程序池 -> 高级设置 -> 在“进程模型”下,将“加载用户配置文件”设置为 True
【讨论】:
这个答案以及 Fragment 的 solution 对我有用。【参考方案12】: Go to run : ctrl + R
Type : %temp%
删除所有文件和文件夹
Rebuild Project.
done!
【讨论】:
【参考方案13】:就我而言,我使用的是简单模拟,而模拟用户无法访问其中一个项目程序集。我的解决方案:
-
查找内部异常的消息以识别有问题的程序集。
修改程序集文件的安全属性。
a) 将您用于模拟的用户帐户添加到组和用户名。
b) 授予该用户帐户对程序集文件的完全访问权限。
【讨论】:
【参考方案14】:我相信我浪费了大约 1 天的时间来研究它,这就是我得出的结论。
您需要将 Impersonating 用户添加到解决方案的 Debug 文件夹,因为框架将尝试从该位置访问 DLL 并将其放置在临时 Asp.Net 文件夹中。
所以基本上遵循这两个步骤
授予C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files
下临时 Asp.Net 文件夹的权限,并确保您在此处添加的用户与您在模拟时使用的用户相同。
将 Impersonating 用户添加到解决方案的 Debug 文件夹 YourSolutionPath .. \bin\Debug
这应该可以工作
【讨论】:
【参考方案15】:我遇到了这个问题,结果发现一个引用的包/程序集被 Windows 加密了。发生这种情况是因为我的公司实施了一项要求对“我的文档”文件夹进行加密的策略,而我的 Visual Studio 解决方案恰好位于该目录下。
我可以手动进入 Windows 资源管理器中的文件/目录属性并禁用加密。但就我而言,这是一个临时解决方案,因为网络策略最终会将其改回。我最终将我的 VS 解决方案移动到另一个未加密的位置。
【讨论】:
【参考方案16】:在我的例子中,我将服务从一台服务器复制到另一台服务器,而没有从 Visual Studio 执行正确的部署。说来话长。
无论如何,我已经设置了所有适当的 NTFS 权限等等,但它仍然无法加载服务的主 DLL。
我通过将相应的 service.pdb 文件重命名为其他文件来修复它。
例如,这是我的 bin 文件夹:
\bin\
service.dll
service.dll.config
service.pdb
我将 service.pdb 重命名为 zzservice.pdb,然后 service.dll 加载正常。
【讨论】:
它可能已经解决了你的问题,但它没有解释原因【参考方案17】:转到 IIS -> 应用程序池 -> 高级设置 -> 启用 32 位应用程序
【讨论】:
你美!!为我解决了很多问题 注意:如果使用 COM(或任何其他 32 位库),则此设置是必需的。在我的情况下,COM 是交易。【参考方案18】:我正在新服务器上设置环境。我的 web.config 获得了如下所示的身份节点。当我遇到“无法加载文件或程序集或其依赖项之一。访问被拒绝。问题是随机的,但发生一次后,它会继续”
添加 ccs\HJKWeb 作为我的新服务器的用户列表。
<authentication mode="Windows" />
<identity impersonate="true" password="******" userName="ccs\HJKWeb" />
【讨论】:
【参考方案19】:如果您得到 DLL 无法找到而不是访问被拒绝,请确保您安装了适当的 VC++ Redistributable。
【讨论】:
【参考方案20】:对我来说,以下 hack 有效; 转到 IIS -> 应用程序池 -> 高级设置 -> 进程模型 -> 身份 从内置帐户(ApplicationPoolIdentity)更改为自定义帐户(我的域用户)
【讨论】:
以上是关于无法加载文件或程序集或其依赖项之一。访问被拒绝。问题是随机的,但发生一次后,它会继续的主要内容,如果未能解决你的问题,请参考以下文章
从 packages.config 迁移到 PackageReferences 导致无法加载文件或程序集“...”或其依赖项之一。访问被拒绝
BadImageFormatException 无法加载文件或程序集或其依赖项之一。试图加载格式不正确的程序
无法加载文件或程序集“msshrtmi”或其依赖项之一(Azure 表存储访问)
DotNetOpenAuth.Asp 无法在 MVC4 应用程序单元测试中加载程序集或其依赖项之一
无法加载文件或程序集“WebGrease,版本=1.5.1.25624,文化=中性,PublicKeyToken=31bf3856ad364e35”或其依赖项之一