无法加载文件或程序集或其依赖项之一。 访问被拒绝。 这个问题是随机的,但一旦发生,就会继续
我发现有很多关于这个错误的信息:'错误:无法加载文件或程序集'* .dll'或其依赖项之一。 访问被拒绝。 但我还没有find具体的答案我的情况。 我的网站部署在6个不同的生产服务器上,只在一台服务器上面对这个问题。 这个问题是随机的,但它发生一次后,它继续,直到网站重新编译通过在web.config文件(我知道把戏,在web.config重新编译web应用程序中修改后)做一个小的修改,并在该服务器上的网站启动加工。 昨天,工作一个月后重现问题。 我们无法承受生产上的这个问题。
发行细节:
“/”应用程序中的服务器错误。 ____________________________________无法加载文件或程序集“MainCore.DbImpl,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null”或其某个依赖项。 访问被拒绝。 说明:执行当前Web请求期间发生未处理的exception。 请查看堆栈跟踪,了解有关错误的更多信息以及源代码的位置。
exception详细信息:System.IO.FileLoadException:无法加载文件或程序集“MainCore.DbImpl,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null”或其某个依赖项。 访问被拒绝。
源错误:执行当前Web请求期间生成未处理的exception。 有关exception的来源和位置的信息可以使用下面的exception堆栈跟踪来标识。
程序集加载跟踪:以下信息可以帮助确定程序集“MainCore.DbImpl,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null”为什么无法加载。
警告:程序集绑定日志logging被closures。 要启用程序集绑定失败日志logging,请将registry值[HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)设置为1.注意:与程序集绑定失败日志logging相关的性能损失。 要closures此function,请删除registry值[HKLM \ Software \ Microsoft \ Fusion!EnableLog]。
堆栈跟踪:
[FileLoadException:无法加载文件或程序集“MainCore.DbImpl,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null”或其依赖项之一。 Access … DibImpl.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)+49 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,布尔includeStagesAfterAsyncPoint)+2428
____________________________________版本信息:Microsoft .NET Framework版本:2.0.50727.5446; ASP.NET版本:2.0.50727.5420
对于我的场景,我发现web.config文件中有一个身份节点。
<identity impersonate="true" userName="blah" password="blah">
当我从节点删除用户名和密码参数,它开始工作。
另一个选项可能是您需要确保指定的userName有权访问在各种C:\ Windows \ Microsoft.NET \ Framework {版本}文件夹中find的那些“Temporary ASP.NET Files”文件夹。
希望这可以帮助别人!
有同样的问题,通过将参数“启用32位应用程序”设置为“true” (在iis应用程序池的高级设置中)进行修复。
我的解决scheme如下:
我在C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files
下找不到根文件夹。
谷歌告诉我,这可能是对当前用户的权限问题,然后我发现我有一个当前的身份:服务器的其余部分有当前身份: NT AUTHORITY\NETWORK SERVICE
服务器故障的IIS APPPOOL
。
然后我将当前标识从IIS APPPOOL
为NT AUTHORITY\NETWORK SERVICE
。
从这里,我发现重置Web应用程序重build临时ASP.NETcaching,解决问题。
对任何尝试了大多数解决scheme但仍然有问题的人来说。
我的解决scheme与位于本文底部的其他解决scheme不同,但在尝试之前,请确保您已经用尽了以下列表。 可以肯定的是,我尝试了所有这些,但无济于事。
-
重新编译并重新部署,不要更新现有的应用程序。 SO答案
-
授予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>应用程序池>select当前应用程序池>高级设置>身份。
SO答案 (如果不起作用,请恢复默认)
-
validationIIS版本和AppPool .NET版本与您的应用程序的兼容性。 非常适用于首次部署。 SO答案
-
validation模拟configuration(如果适用)。 SO答案
我的解决scheme
我发现某些反病毒软件正在积极阻止在“Temporary ASP.NET Files”目录下编译DLL,我的McAfee是McAfee,IT人员没有通知我这个安装。
根据McAfee专家和Microsoft的build议,您需要在实时扫描中排除目录“Temporary ASP.NET Files” 。
资料来源:
- 迈克菲支持论坛
- Microsoft支持
- Asp.Net论坛
不要禁用反病毒软件,因为它只是在做它的工作。 不要手动复制缺less的DLL文件在\ Temporary ASP.NET Files {项目名称},因为这是pipe道粘贴。
如果你仍然面临这个问题,试试这个:
打开你的IISpipe理器 – >应用程序池 – >select你的应用程序池 – >高级设置 – >在'进程模型'下设置'Load User Profile'设置为True
如果您正在使用模拟,请确保授予权限,包括对以下文件夹上的相关用户帐户的写入和修改权限:
C:\Users\[username]\AppData\Local\Temp\Temporary ASP.NET Files
我错过了修改权限,这就是为什么只是添加默认权限不为我工作。
我有同样的问题,通过重build和重新部署所有依赖的Dll文件解决
检查IIS设置。 在.NET框架中,我使用带有32位或64位编译的IIS 7.5。 如果您有一个使用32位模式的应用程序,请确保启用应用程序池以使用32位指令。 否则,无论你设置了多less安全性或强大的DLL签名,什么都不起作用。
我相信我浪费了一天的时间来研究它,而这正是我所提出的。
您需要将模拟用户添加到解决scheme的“debugging”文件夹中,因为框架将尝试从此位置访问该DLL,并将其放入Temporary Asp.Net文件夹中。
所以基本上遵循这两个步骤
-
为
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files
下的Temporary Asp.Net文件夹授予权限,并确保您在此处添加的用户与您在模拟时使用的用户相同。 -
将模拟用户添加到解决schemeYourSolutionPath .. \ bin \ Debug的Debug文件夹中
这应该工作
在我的情况下,这是由于我的防病毒(McAfee)的访问保护function。 这显然阻止了对这个文件的访问,就像这样的错误一样。
我禁用它,解决scheme运行。 您可能想要检查您可能正在运行的可能会影响对某些文件的访问的实用程序应用程序。
在我的情况下,我没有使用模拟。 我的解决scheme是完全访问我的项目目录的用户组“IIS_IUSRS”。
Go to run : ctrl + R Type : %temp%
删除所有文件和文件夹
Rebuild Project. done!
我遇到了这个问题,结果是一个引用的包/程序集正在被Windowsencryption。 发生这种情况是因为我的公司实施了一项策略,要求对“我的文档”文件夹进行encryption,并且我的Visual Studio解决scheme恰好位于该目录下。
我可以手动进入Windows资源pipe理器中的文件/目录属性,并禁用encryption。 但就我而言,这是一个临时的解决scheme,因为networking策略最终会改变它。 我结束了我的VS解决scheme移动到另一个未encryption的位置。
我从VS运行这个错误。 原来,我打开了一个解决scheme,而不是以pipe理员身份运行Visual Studio。 closuresVisual Studio并再次运行它作为pipe理员然后重build解决了这个对我来说。
希望能帮助别人。
在我的情况下,我使用简单的模拟和模拟用户无法访问其中一个项目程序集。 我的解决scheme
- 查找内部exception的消息来识别有问题的程序集。
-
修改程序集文件的安全属性。
a)将您用于模拟的用户帐户添加到组和用户名称。
b)授予该用户帐户对程序集文件的完全访问权限。
在我的情况下,我已经从一台服务器复制到另一台服务器,而不从Visual Studio进行适当的部署。 很长的故事。
无论如何,我已经设置了所有适当的NTFS权限和什么,但它仍然无法加载服务的主DLL。
我通过重命名相应的service.pdb文件来修复它。
例如这里是我的bin文件夹: \bin\ service.dll service.dll.config service.pdb
我将service.pdb重命名为zzservice.pdb,然后service.dll加载正常。
转到IIS – >应用程序池 – >高级设置 – >启用32位应用程序