我在ASP.NET MVC 3项目中引用了一些32位和一些64位DLL。
项目编译但我得到运行时错误。
这是因为我正在以64位运行Web项目。
如何在本地IIS中“启用32位”(我在IIS 7.5 Pro中的操作方式)?
我使用的是.NET 4.0
我得到的错误是:
检索具有CLSID {A6775dfd2-1dfF-421C-A187-4D55F4DDFBFF}的组件的COM类工厂由于以下错误而失败:80040154未注册类(HRESULT异常:0x80040154(REGDB_E_CLASSNOTREG))。
答案 0 :(得分:4)
如果您不需要64位组件(不确定在那里运行的是什么,或者是否可以排除它,因为您只是想知道如何以32位运行)
http://learn.iis.net/page.aspx/201/32-bit-mode-worker-processes/
您可以通过以下方式在服务器级别进行设置: %windir%\ system32 \ inetsrv \ appcmd set config -section:applicationPools -applicationPoolDefaults.enable32BitAppOnWin64:true
或者设置您的特定应用程序池(更推荐imho),您可以尝试以下操作。对不起,这个来自的页面似乎不再活跃,只有googles缓存现在正在显示:
强制IIS创建32位应用程序池工作进程
如果您的应用程序作为Web应用程序运行,则意味着它正在运行 一个IIS应用程序池工作进程,您将需要该工作进程 (w3wp.exe)是一个32位进程。这可以在。中指定 应用程序池的高级设置:
选择适用于您的网络应用的应用池。单击高级设置.... 在右侧编辑应用程序池。更改启用32位的值 (一般)到真实的申请。
请注意,设置中的“启用”一词并不代表“允许” “允许32位或64位应用程序。”它实际上意味着“强制” 如“强制工作进程以32位模式运行,以便32位 支持应用程序。“这意味着应用程序池工作者 当此设置时,进程将始终作为32位进程启动 值为True。将其设置为False将启动64位应用程序 池工人流程。
请注意,当应用程序池工作进程启动时,它会显示在 任务管理器中“进程”选项卡上的“图像名称”列 w3wp.exe的。启用32位应用程序设置的值为 没错,它将被列为w3wp.exe * 32。
答案 1 :(得分:2)
IIS Express 7.5(如果安装,则由Visual Studio 2010使用)仅为32位:
引用:
支持32位和64位系统,但是只存在32位版本的IIS 7.5 Express。
所以我无法想象你的问题会与通常的32位/ 64位池模式问题有关,如果你的所有DLL都是32位的话会出现这种问题。
但是,如果您尝试加载64位COM DLL,则会失败; 64个二进制文件无法加载到32位进程中,反之亦然。
选择要调试的网络服务器时,另一个问题是忘记勾选Use IIS Express
复选框:
如果您没有勾选该复选框,那么您将在Windows附带的IIS7版本的 DefaultWebSite 中的子应用程序中运行您的站点。
DefaultWebSite 在 DefaultAppPool 中运行,在64位版本的Windows中,它运行为64位进程。因此,如果要使用此字符串并使用32位二进制文件,则需要将 DefaultAppPool 更改为32位运行。
您需要使用IIS7的MMC管理单元或从命令行运行appcmd.exe
工具来执行此操作。
答案 2 :(得分:0)
将编译目标设置为x86而不是AnyCPU或x64。您的dll将始终以32位运行,而无需使用IIS服务器设置。