首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我必须运行控制台应用程序x86来查看COM DLL,而ASP.NET可以运行AnyCPU?

为什么我必须运行控制台应用程序x86来查看COM DLL,而ASP.NET可以运行AnyCPU?
EN

Stack Overflow用户
提问于 2013-03-28 15:17:20
回答 2查看 109关注 0票数 2

我正在运行64位Windows 7,Studio 2012,并且不完全理解以下行为:

  1. 我通过regsvr32注册了第三方COM dll。

  1. 我创建了一个ASP.Net项目.
    • 我参考COM类型库
    • 我将目标CPU设置为"AnyCPU“
    • 一切都很好编译和运行。

  1. 我创建一个控制台应用程序
    • 我参考COM类型库
    • 我将目标CPU设置为"AnyCPU“
    • 它编译,但我得到一个运行时错误"COM库未注册。“
    • 我将目标CPU切换到x86,它运行良好。

当将站点部署到IIS时,我必须在App中“启用32位应用程序”才能工作。也许这是在Visual开发服务器中自动完成的。

是Visual开发服务器只是将我的站点作为32位在幕后运行的,还是这里有更深入的工作呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-28 15:19:16

是的,您的web服务器正在以32位应用程序的形式运行您的站点.

票数 4
EN

Stack Overflow用户

发布于 2013-03-28 15:32:47

在IIS中启用“32位应用程序”将启动w3wp进程的w3wp版本。

AnyCPU是一个方便的特性,由.NET提供,可以决定应用程序启动时选择哪种处理器体系结构。这是可能的,因为.NET应用程序不编译到x86/x64机器代码,而是编译到中间语言。启动应用程序时,它会在幕后编译成x64或x86机器代码。

然而,非.NET应用程序通常直接编译为目标系统的机器代码。此外,对于x86和x64,COM服务器必须在不同的注册表分支中注册。

由于您只有32位兼容服务器(DLL),这将导致您所描述的情况:

  1. 当使用AnyCPU启动控制台应用程序时,它会根据系统使用的体系结构编译为x86或x64。在此之后,引用就会被加载。如果您在x64上,进程将无法找到服务器的COM工厂。否则一切都会好起来。这就是为什么您不应该在COM引用中使用AnyCPU。
  2. IIS只能在两种模式下运行:显式x86或x64 (默认)。启用“32位应用程序”将导致x86进程,它以x86模式加载web应用程序。当您使用"AnyCPU“时,您的COM引用是很好的。但是,如果您由于某种原因禁用了“32位应用程序”,就会遇到麻烦。将"x64“设置为目标平台将导致BadImageFormatException
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15685555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档