85

我发现了很多关于这个错误的信息:'错误:无法加载文件或程序集'*.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 quietType) in ...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。
____________________________________

版本信息:Microsoft .NET Framework 版本:2.0.50727.5446;ASP.NET 版本:2.0.50727.5420

4

21 回答 21

53

对于我的场景,我发现 web.config 文件中有一个身份节点。

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

当我从节点中删除用户名和密码参数时,它开始工作。

另一种选择可能是您需要确保指定的用户名有权使用在各种 C:\Windows\Microsoft.NET\Framework{version} 文件夹中找到的那些“临时 ASP.NET 文件”文件夹。

希望这对其他人有所帮助!

于 2013-11-12T16:48:35.900 回答
40

有同样的问题,通过将参数“启用 32 位应用程序”设置为“true”(在 iis 应用程序池的高级设置中)修复。

于 2014-08-07T11:03:40.800 回答
28

我的解决方案如下:

没有在C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files.

谷歌告诉我这可能是针对当前用户的权限问题,然后我发现我有一个 current Identity:IIS APPPOOL在故障服务器中,服务器的其余部分有 Current Identity: NT AUTHORITY\NETWORK SERVICE

然后我将 Current Identity 从 更改 IIS APPPOOLNT AUTHORITY\NETWORK SERVICE

从这里,我发现重置 Web 应用程序会重建临时 ASP.NET 缓存,从而解决问题。

于 2012-06-20T07:42:39.107 回答
25

对于尝试了大多数解决方案但仍然遇到问题的其他人。

我的解决方案与本文底部的其他解决方案不同,但在您尝试之前,请确保您已用尽以下列表。可以肯定的是,我已经尝试了所有这些但无济于事。

  1. 从头开始重新编译和重新部署,不要更新现有的应用程序。所以回答

  2. 授予 IIS_IUSRS 对目录“C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files”的完全访问权限

    请记住您正在使用的框架版本。如果您的应用正在使用模拟,请使用该身份而不是 IIS_IUSRS

  3. 删除目录"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files"的所有内容。

    请记住您正在使用的框架版本

  4. 将您的应用正在使用的 AppPool 的标识从 ApplicatonPoolIdentity 更改为 NetworkService。

    IIS > 应用程序池 > 选择当前应用程序池 > 高级设置 > 身份。

    SO Answer(如果不起作用,请恢复默认值)

  5. 验证 IIS 版本和 AppPool .NET 版本与您的应用程序的兼容性。高度适用于首次部署。所以回答

  6. 如果适用,请验证模拟配置。所以回答

我的解决方案:

我发现某些杀毒软件正在积极阻止“Temporary ASP.NET Files”目录中的DLL编译,我的是McAfee,IT人员没有通知我安装。

根据 McAfee 专家和 Microsoft 的建议,您需要在实时扫描中排除目录“Temporary ASP.NET Files” 。

资料来源:

不要禁用防病毒软件,因为它只是在发挥作用。不要手动复制目录\Temporary ASP.NET Files{project name}中缺少的 DLL 文件,因为那是管道胶带。

于 2014-05-08T07:03:24.723 回答
7

转到 IIS -> 应用程序池 -> 高级设置 -> 启用 32 位应用程序

于 2017-11-16T04:34:31.363 回答
6

如果您使用模拟,请务必授予权限,包括对以下文件夹中的相关用户帐户的写入修改权限:

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

我错过了修改权限,这就是为什么只添加默认权限对我不起作用。

于 2014-11-04T22:41:54.063 回答
4

如果您仍然遇到问题,请尝试以下操作:

打开您的 IIS 管理器 -> 应用程序池 -> 选择您的应用程序池 -> 高级设置 -> 在“进程模型”下,将“加载用户配置文件”设置为 True

在此处输入图像描述

于 2016-02-05T10:25:37.443 回答
4

对我来说,以下 hack 有效;转到 IIS -> 应用程序池 -> 高级设置 -> 进程模型 -> 身份从内置帐户(ApplicationPoolIdentity)更改为自定义帐户(我的域用户)

于 2018-09-03T11:43:54.817 回答
4

我相信我浪费了 1 天的时间来研究它,这就是我得出的结论。

您需要将 Impersonating 用户添加到解决方案的 Debug 文件夹,因为框架将尝试从该位置访问 DLL 并将其放置在临时 Asp.Net 文件夹中。

所以基本上遵循这两个步骤

  1. 授予 Temporary Asp.Net 文件夹下的权限,C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files并确保您在此处添加的用户与您在模拟时使用的用户相同。

  2. 将 Impersonating 用户添加到解决方案 YourSolutionPath 的 Debug 文件夹 .. \bin\Debug

这应该工作

于 2016-10-18T16:11:13.643 回答
3

就我而言,这是由于我的防病毒软件 (McAfee) 的访问保护功能所致。它显然阻止了对这个文件的访问,因为这样的错误。

我禁用了它并运行了解决方案。您可能想要检查您可能正在运行的任何实用程序应用程序,这些应用程序可能会影响对某些文件的访问。

于 2015-11-04T18:53:00.090 回答
3

我有同样的问题,通过重建和重新部署ALL Dependents Dll 文件修复

于 2015-09-01T08:15:14.670 回答
2

我正在新服务器上设置环境。我的 web.config 获得了如下所示的身份节点。当我遇到“无法加载文件或程序集或其依赖项之一。访问被拒绝。问题是随机的,但发生一次后,它会继续”

添加 ccs\HJKWeb 作为我的新服务器的用户列表。

  <authentication mode="Windows" />
        <identity impersonate="true" password="******" userName="ccs\HJKWeb" />
于 2018-05-31T13:32:35.900 回答
2

检查 IIS 设置。我在 .NET 框架内使用带有 32 位或 64 位编译的 IIS 7.5。如果您有使用 32 位模式的应用程序,请确保启用应用程序池以能够使用 32 位指令。否则,无论您对 DLL 设置多少安全性或强签名,似乎都不起作用。

于 2015-10-22T22:53:12.057 回答
1

在我的情况下,我没有使用模拟。我的解决方案是为用户组“IIS_IUSRS”授予对我的项目目录的完全访问权限。

于 2015-06-04T14:16:36.053 回答
1

如果您得到 DLL 无法找到而不是访问被拒绝,请确保您安装了适当的 VC++ Redistributable。

于 2018-07-19T00:22:05.577 回答
1

在我的例子中,我在没有从 Visual Studio 执行正确部署的情况下将服务从一台服务器复制到另一台服务器。很长的故事。

无论如何,我已经设置了所有适当的 NTFS 权限等等,但它仍然无法加载该服务的主 DLL。

我通过将相应的 service.pdb 文件重命名为其他内容来修复它。

例如,这是我的 bin 文件夹: \bin\ service.dll service.dll.config service.pdb 我将 service.pdb 重命名为 zzservice.pdb,然后 service.dll 加载正常。

于 2017-09-07T13:05:55.940 回答
1

我遇到了这个问题,结果发现一个引用的包/程序集正在被 Windows 加密。发生这种情况是因为我的公司实施了一项要求对“我的文档”文件夹进行加密的策略,而我的 Visual Studio 解决方案恰好位于该目录下。

我可以手动进入 Windows 资源管理器中的文件/目录属性并禁用加密。但就我而言,这是一个临时解决方案,因为网络策略最终会将其改回。我最终将我的 VS 解决方案移动到另一个未加密的位置。

于 2016-10-28T02:18:59.963 回答
1
 Go to run  : ctrl + R
 Type : %temp%

删除所有文件和文件夹

 Rebuild Project.
 done!
于 2016-07-01T14:15:01.153 回答
0

我从 VS 运行此错误。结果我打开了一个解决方案,没有以管理员身份运行 Visual Studio。关闭 Visual Studio 并以管理员身份再次运行它然后重建为我解决了这个问题。

希望对某人有所帮助。

于 2015-04-24T08:59:21.230 回答
0

就我而言,我使用的是简单模拟,而模拟用户无法访问其中一个项目程序集。我的解决方案:

  1. 查找内部异常的消息以识别有问题的程序集。
  2. 修改程序集文件的安全属性。

    a) 将您用于模拟的用户帐户添加到组和用户名。

    b) 授予该用户帐户对程序集文件的完全访问权限。

于 2016-08-24T20:23:25.047 回答
0

在我的情况下,必须将具有读取权限的用户添加到文件夹权限中。我无意中删除了它们。计算机\用户

于 2022-01-24T13:13:12.290 回答