最近在windows2008 x64位系统下的IIS7下部署asp.net程序。
vs2005或vs2008默认的情况下是Any cpu 的也就是支持x86和x64两种系统的。可我的程序在引用了一个三方dll组件时引起了这样的错误:
错误 “/test”应用程序中的服务器错误。
--------------------------------------------------------------------------------
未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格式不正确的程序。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.BadImageFormatException: 未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格式不正确的程序。
源错误:
执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
程序集加载跟踪: 下列信息有助于确定程序集“XXX”无法加载的原因。
警告: 程序集绑定日志记录被关闭。
要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)设置为 1。
注意: 会有一些与程序集绑定失败日志记录关联的性能损失。
要关闭此功能,请移除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。
在网上搜索了N久。查询到如下信息。
ASP.NET
程序在编译的时候默认是 Any CPU
,即编译的程序可以在 X86
、 X64
系统平台上运行。若希望我们的 ASP.NET
程序运行在 X64
系统上,我们所要做的仅仅是部署 IIS
,修改配置。
若想程序运行于 IIS32
位模式下,即运行在 .net framwork32
位下进行如下配置:
1.cscript %systemdrive%\inetpub\adminscripts\adsutil.vbs set w3svc/appPools/enable32bitapponwin64 1
修改 IIS
配置,允许 32
位程序运行
2.C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -i
为 IIS
注册 asp.net32
。注册后在 IIS
的 web
扩展里显示的是 Asp.net2.0.*32bit
。
3.Web
扩展里允许 Asp.net2.0.*32bit
运行。运行的是 w3wp32.exe
进程。
二 .64
位模式
1.cscript %systemdrive%\inetpub\adminscripts\adsutil.vbs set w3svc/appPools/enable32bitapponwin64 0
默认就是 0
,若原来运行了 32
位程序,则需要重新设置为 0
。
2.C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\aspnet_regiis - i
为 IIS
注册 64
为 Asp.NET
。注册了 64
位 ASP.NET
的 IIS
在 Web
扩展里显示的是 Asp.net2.0.*
。
3.Web
扩展里允许 Asp.net2.0.*
运行。运行的是 w3wp.exe
进程。
处理后还是没有出现“w3wp32.exe进程 ”。
但我的 Web扩展 里面是有, Asp.net2.0的32位设置为允许的。
后新建了应用程序池,在新建的应用程序池的“高级设置” 里面,把“启用32位应用程序”设置为true。
程序可以运行了。
因为我的机器已经设置过,cscript %systemdrive%\inetpub\adminscripts\adsutil.vbs set w3svc/appPools/enable32bitapponwin64 1 为32位。
为了测试,我又把它设置为64位:cscript %systemdrive%\inetpub\adminscripts\adsutil.vbs set w3svc/appPools/enable32bitapponwin64 0
此时,程序还是可以运行。
所以我认为:不用按照上面的1,2,3步设置开启32位。仅仅设置应用程序池中“启动32位应用程序”为true。此时应该就可以运行32位的程序了。
如果有人在X64位系统上,运行32位的asp.net程序,可以直接试试用把“启用32位应用程序”设置为true。 的方法。
此文系转载,原地址:http://www.cnblogs.com/angelasp/archive/2013/06/08/3126941.html