IIS6无法加载Global.asax类型问题求助:本地IIS10运行正常
这个问题在IIS6上挺常见的,毕竟IIS6和IIS10的部署机制有不少差异,结合你已经做的检查,我来补充几个容易忽略的排查方向:
确认程序集是否正确部署:IIS6对网站根目录的
bin文件夹依赖极强,一定要检查发布包的bin目录里有没有包含项目编译生成的目标dll(也就是包含Namespace.Global类的那个程序集)。可以对比本地编译输出的dll版本和部署到IIS6上的版本,确保完全一致,同时检查IIS6网站的bin文件夹权限,保证应用程序池身份有读取权限。验证Global.asax的声明细节:打开IIS6服务器上的Global.asax文件,确认第一行的声明格式正确:
<%@ Application Codebehind="Global.asax.cs" Inherits="Namespace.Global" Language="C#" %>重点核对
Inherits属性的内容,要和代码里的命名空间+类名完全匹配(IIS6对大小写敏感)。另外别忘了检查项目里的Global.asax.cs文件的Build Action是不是Compile状态——如果设成了None,这个类根本不会被编译到dll里,自然加载失败。调整应用程序池设置:IIS6默认的应用程序池是.NET 2.0框架,如果你的项目是.NET 4.0及以上版本,必须右键对应应用程序池→属性→ASP.NET标签,选择匹配的.NET版本。同时可以临时把应用程序池的身份改成
Network Service或本地系统(测试用,后续再调回最小权限),排除权限不足导致的程序集加载失败。清理缓存并重新部署:IIS6的临时文件缓存很容易出问题,先停止网站,删除网站根目录下的所有文件,重新上传完整的发布包。另外手动清理
C:\WINDOWS\Microsoft.NET\Framework\v[你的.NET版本]\Temporary ASP.NET Files下对应网站的缓存文件夹,避免旧的编译残留干扰加载。检查项目输出路径配置:回到本地项目,右键项目→属性→生成,确认“输出路径”是
bin\,没有自定义到其他目录。如果输出路径不对,发布时dll可能不会被放到网站的bin文件夹里,IIS6自然找不到对应的类型。
如果以上步骤都试过还是没解决,可以打开Windows事件查看器,查看“应用程序”日志里的详细错误信息——IIS6通常会在这里记录程序集加载失败的具体原因,比如依赖的其他dll缺失、版本不兼容等,能帮你进一步定位问题。
内容的提问来源于stack exchange,提问作者Ananth Kumble

