无法加载文件或程序集或其依赖项之一。访问被拒绝。问题是随机的,但一旦发生,便会继续


81

我已经找到了很多有关此错误的信息:'ERROR:无法加载文件或程序集'* .dll'或其依赖项之一。访问被拒绝。但是我还没有找到针对我的情况的答案。我的站点部署在6台不同的生产服务器上,而仅在一台服务器上面临此问题。这个问题是随机的,但是一旦发生,它会一直持续到通过对web.config文件做一些小的修改来重新编译该站点(我知道这是技巧,在对web.config进行修改后重新编译该Web应用程序),然后该服务器上的站点开始加工。昨天,问题在工作了一个月后才重现。我们无法负担这个生产上的问题。
问题详细信息:

“ /”应用程序中的服务器错误。 ____________________________________ 无法加载文件或程序集“ MainCore.DbImpl,版本= 0.0.0.0,区域性=中性,PublicKeyToken =空”或其依赖项之一。访问被拒绝。说明:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中起源的更多信息。

异常详细信息:System.IO.FileLoadException:无法加载文件或程序集'MainCore.DbImpl,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一。访问被拒绝。

源错误:在执行当前Web请求的过程中生成了未处理的异常。可以使用下面的异常堆栈跟踪来标识有关异常源和位置的信息。

程序集加载跟踪:以下信息有助于确定为什么无法加载程序集'MainCore.DbImpl,版本= 0.0.0.0,文化=中性,PublicKeyToken =空'。

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中\ root \ SportChannel \ ModelImpl \ Ttc \ TTCModelController.cs:283 ... WebRoot.UserControls.HeadlinesTab.Page_Load中的\ ModelImpl \ Ttc \ TTCModelController.cs:171 ... ModelImpl.TTCModelController.GetLatestFourTourSchedulesXml() ,EventArgs e)+491 System.Web.Util。+491 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp,Object o,Object t,EventArgs e)。
____________________________________

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


此问题是由上载新版本的dll引起的吗?
nunespascal,2012年

没有变化,所有服务器上都使用相同的旧dll,没有变化
khawarPK 2012年

所有服务器上的MainCore.DbImpl.dll的旧版本相同,没有上载或更改任何内容。
khawarPK

下次发生这种情况时,请尝试清理/删除ASP.Net临时文件,请使用bcoz清理它们,您可能需要重新启动IIS。
Furqan Hameedi 2012年

我如何避免下次在此服务器上发生此问题?
khawarPK

Answers:


51

对于我的方案,我发现web.config文件中有一个标识节点。

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

当我从节点上删除userName和password参数时,它开始工作。

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

希望这可以帮助其他人!


2
对我而言,在本地运行该解决方案意味着完全从web.config中删除标识节点,但是将其部署到生产服务器需要模拟,因此必须添加标识节点。详情请参阅我的答案
bkwdesign 2014年

3
我将模拟用户添加到了名为IIS_IUSRS的本地组中,而不是试图确切地找到要使用的“各种框架文件夹”。
Andreas Jansson

不要忘记,可以通过代码(无需web.config)进行模拟,在我的情况下,用户(匿名登录)已保存在Chrome浏览器中。必须重新启动Chrome并重新访问网站以输入我的用户凭据。
Volodymyr Kotylo

36

出现相同问题,已通过将参数“启用32位应用程序”设置“ true”(在iis应用程序池的高级设置中)解决。


这个答案与Love Chopra的解决方案一起为我工作。
案例303

好答案!如果像我一样,如果您尝试发布到Azure并遇到相同的错误,请转到Azure门户上的应用程序,转到“应用程序设置”,然后为“平台”设置选择“ 64位”选项。
MV23

@ MV23为什么是64位?为什么有帮助?
nmit026 '19

26

我的解决方案如下:

我在下没有找到文件夹C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files

Google告诉我,这可能是针对当前用户的权限问题,然后我发现我有一个当前身份:IIS APPPOOL在发生故障的服务器中,该服务器的其余部分具有“当前身份:” NT AUTHORITY\NETWORK SERVICE

然后,我将“当前身份”从更改 IIS APPPOOLNT 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)
Prajwal Bhat

@Bhat:您的问题完全不同。只需比较错误消息。
JensG '17

22

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

我的解决方案与其他解决方案不同,后者位于本文的底部,但是在尝试之前,请确保已耗尽以下列表。可以肯定的是,我尝试了所有这些方法,但是都没有成功。

  1. 从头开始重新编译和重新部署,请勿更新现有应用程序。SO答案

  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回答(如果不起作用,请恢复为默认值)

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

  6. 验证模拟配置(如果适用)。SO答案

我的解决方案:

我发现某些防病毒软件正在积极阻止“ Temporary ASP.NET Files”目录下的DLL编译,我的是McAfee,IT人员未能通知我该安装信息。

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

资料来源:

不要禁用防病毒,因为它只是在做自己的工作。不要在目录\ Temporary ASP.NET Files {project name}中手动复制丢失的DLL文件,因为那是风管攻丝。


即使错误仅(重复)引用了我的本地bin,清除临时ASP.Net文件也对我有用。很混乱。
dudeNumber4 2014年

1
非常感谢您...我一直在与这个烦人的错误作斗争近两个星期。当我禁用防病毒软件(BitDefender Free防病毒软件)后,一切恢复正常。
亚历山德拉·佩雷斯

1
每6个月左右,我会有一个行为不当的开发人员部署,使我回到相同的答案-很棒的@Yorro!。再一次,即使最终导致我的模拟用户需要访问Temporary ASP.NET Files目录,但直到从IIS删除我的应用程序(而不是基础文件)并重新添加应用程序返回IIS。
bkwdesign 2015年

以我为例,我发现McAfee阻止了对.Net应用程序dll的访问,如McAfee的日志所示。我必须进入McAfee的“访问保护”并更改“反间谍软件的最大保护”。然后删除名为“防止所有程序从Temp文件夹中运行文件的程序”项的“阻止”检查。可以配置它而不是禁用它,这更好。查看AccessProctectionLog.txt以查看消息是否被阻止或报告。日志的位置在“报告”选项卡页面上。
Paul Syfrett 2015年

在中使用IIS Express时出现错误development environment。关于AppPools的相同问题。
Kiquenet '17

5

如果使用模拟,请确保对以下文件夹上的相关用户帐户授予权限,包括修改权限:

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

我缺少修改权限,这就是为什么仅添加默认权限对我不起作用的原因。


我只遵循了这些步骤,而不是所选答案中更复杂的步骤-仅此一项就解决了。
Veverke

这也对我有用。我使用Technet上的Sysinternal的Process Monitor查找被阻止的文件夹,该文件夹是提到的“ Temporary ASP.NET Files”文件夹。在过程监视器中,关闭除“文件系统活动”按钮以外的所有内容,然后可以搜索“拒绝访问”。
Fordy

4

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

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

在此处输入图片说明


这个答案和Fragment的解决方案一起为我工作。
案例303

4

我相信我在研究上浪费了整整1天的时间,而这正是我得到的结果。

您需要将模拟用户添加到解决方案的Debug文件夹中,因为Framework会尝试从该位置访问DLL并将其放置在Temporary Asp.Net文件夹中。

所以基本上按照以下两个步骤

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

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

这应该工作



3

就我而言,这是由于我的防病毒(McAfee)的访问保护功能所致。由于这种错误,显然是在阻止对此文件的访问。

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


我必须进入McAfee的“访问保护”并更改“反间谍软件的最大保护”。然后,删除名为“防止所有程序从Temp文件夹中运行文件的程序”项的“阻止”检查。可以配置它而不是禁用它,这更好。
Paul Syfrett


2

检查IIS设置。我在.NET框架中将IIS 7.5与32或64位编译一起使用。如果您的应用程序使用32位模式,请确保启用应用程序池以使用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 ++可再发行组件。


0

我从VS运行此错误。原来我没有以管理员身份运行Visual Studio的情况下打开了一个解决方案。关闭Visual Studio,然后以管理员身份再次运行它,然后重新构建为我解决了这个问题。

希望能对某人有所帮助。


0

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

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.