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

kha*_*rPK 77 asp.net .net-assembly

我找到了大量有关此错误的信息:'错误:无法加载文件或程序集'*.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 stupidType)in ... root\SportChannel\ModelImpl\Ttc\TTCModelController.cs:171 ... ModelImpl.TTCModelController.GetLatestFourTourSchedulesXml()in ... root\SportChannel\ModelImpl\Ttc\TTCModelController.cs:283 ... WebRoot.UserControls.HeadlinesTab.Page_Load(Object sender ,EventArgs e)+491 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp,Object o,Object t,EventArgs e)+25 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender,EventArgs e)+42 System. EventHandler.Invoke(Object sender,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 includeStagesBeforeA syncPoint,Boolean includeStagesAfterAsyncPoint)+2428
____________________________________

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

pro*_*dad 47

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

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

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

另一个选项可能是您需要确保指定的userName有权使用各种C:\ Windows\Microsoft.NET\Framework {version}文件夹中的"Temporary ASP.NET Files"文件夹.

希望这有助于其他人!

  • 我将模拟用户添加到名为IIS_IUSRS的本地组,而不是试图找出要使用的"各种框架文件夹". (3认同)
  • 对我来说,本地运行该解决方案意味着从 web.config 中完全删除身份节点,但将其部署到生产服务器需要模拟,因此必须添加身份节点。[查看我的回答了解更多详情](http://stackoverflow.com/a/24704158/1520850) (2认同)

Fra*_*ent 34

有相同的问题,通过将参数"启用32位应用程序"设置"true"(在iis应用程序池的高级设置中)进行修复.


kha*_*rPK 24

我的解决方案如下:

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

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

然后我将Current Identity IIS APPPOOL改为NT AUTHORITY\NETWORK SERVICE.

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


Yor*_*rro 21

对于那些尝试过大多数解决方案但仍有问题的人.

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

  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>应用程序池>选择当前应用程序池>高级设置>标识.

    所以答案(如果不起作用,请恢复默认值)

  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文件,因为那是管道编带.


kad*_*d81 5

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

C:\Users\[username]\AppData\Local\Temp\Temporary ASP.NET Files
Run Code Online (Sandbox Code Playgroud)

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


Pay*_*ali 5

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

  • 你美女!!帮我解决了很多问题 (2认同)