Win Server 2003的IIS6运行ASP.NET MVC应用出现编译错误2146232576求助
解决Windows Server 2003 IIS6上ASP.NET MVC应用的2146232576编译错误
兄弟,你遇到的这个2146232576错误(对应HRESULT: 0x80131500)我之前帮不少人排查过,结合你的场景——本地Win7 IIS(一般是IIS7+)运行正常,到Windows Server 2003的IIS6就出编译问题,大概率是依赖缺失或者IIS6与ASP.NET MVC的兼容性配置没做好,给你梳理几个关键排查点:
一、先确认ASP.NET MVC核心DLL有没有部署到服务器
本地开发环境会自动加载MVC相关的DLL,但服务器上如果没全局安装ASP.NET MVC框架,就必须把这些DLL打包到应用的bin目录里:
- 检查服务器上应用的
bin文件夹,看是否包含System.Web.Mvc.dll、System.Web.Routing.dll、System.Web.Abstractions.dll这几个核心文件(版本要和你开发时用的一致,比如MVC3和MVC4的DLL版本不一样) - 如果没有,回到本地项目,右键这些引用项,选择「属性」,把「复制到本地」改成
True,重新发布项目到服务器就行
二、检查.NET Framework 4.0是否正确注册到IIS6
有时候服务器上装了.NET4.0,但没把它注册到IIS6里,导致IIS识别不了ASP.NET 4.0的应用:
- 打开服务器的命令提示符(一定要以管理员身份运行)
- 切换到.NET4.0的安装目录:
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 - 执行注册命令:
aspnet_regiis.exe -i - 最后重启IIS服务:
iisreset
三、给IIS6配置MVC路由支持
IIS6默认不支持MVC的无扩展名路由规则,这是个老坑了,有两种解决办法:
- 方法1:添加通配符映射(推荐,不改动代码)
在应用的web.config里添加以下配置,让所有请求都通过ASP.NET处理:
注意:如果是64位服务器,路径要改成<system.webServer> <handlers> <add name="MvcHttpHandler" path="*" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv4.0,bitness32" /> </handlers> </system.webServer>Framework64下的对应文件,同时确保应用程序池的「启用32位应用程序」选项和你的项目编译平台一致。 - 方法2:给路由加.aspx后缀(快速临时解决,不用改配置)
在Global.asax的路由注册代码里修改,给控制器路径加上.aspx后缀:routes.MapRoute( "Default", "{controller}.aspx/{action}/{id}", new { action = "Index", id = UrlParameter.Optional } );
四、可选:安装ASP.NET MVC运行时组件
如果你的应用用的是ASP.NET MVC 3或更高版本,服务器上可以安装对应的官方运行时包(比如ASP.NET MVC 3 Runtime),虽然把DLL复制到bin目录也能跑,但全局安装运行时能避免版本冲突,更稳定。
按照上面的步骤逐一排查,应该能搞定这个编译错误。
内容的提问来源于stack exchange,提问作者Sesen
相关产品推荐
相关产品推荐

