[英]Why am I Able to load x64 assembly into AnyCPU Prefer 32 bit executable?
[英]Why am I able to call a 32 bit COM library from an AnyCPU .NET web application running in IIS7 in 64 bit mode?
在不使用 COM+ 代理服务的情况下,我很高兴能够使用来自使用目标 AnyCPU 编译的 .NET 应用程序的 32 位 COM 互操作库中的类,该应用程序在 64 位 w3wp 进程中运行。
我在 64 位 .NET 进程中成功地从 32 位 COM 互操作库实例化类。
w3wp 在 64 位模式下运行,并且 IIS 配置设置为不允许 32 位应用程序。 除此之外,还有一个专门 x64 编译和注册的 .NET 程序集。
我只是想知道,这怎么可能?
有趣的是,如果代码是使用 Visual Studio 2008 编译的,目标是 3.5 框架,这将非常有效。 如果使用针对 3.5 框架的 Visual Studio 2010 编译相同的代码,则应用程序在尝试加载 32 位 COM 互操作库时会严重失败。 正如它应该。
如果它正在运行,它将以 32 位模式运行,你不能在 64 位进程中拥有 32 位的东西,反之亦然。 一个过程完全是一个或另一个。
这与在 64 位主机上运行 32 位进程不同,显然,这是可行的。
另一种选择是第三方的东西实际上提供了一个 64 位的引用,而你关于它运行 32 位的结论是不正确的。
我将把它归结为解决方案所包含的大量代码和项目中的一些复杂性。 将违规库的要求删除为 64 位已经解决了这个问题,但自然不会回答这个问题。 它只会让它过时。
你。 是。 不是。
观点。
将 web 应用程序置于 32 位模式。 这实际上是他们应该按照 MS IIS 指南运行的方式(大多数人从不费心阅读)。
w3wp 进程可以在 32 位模式下运行,因此可以处理 32 位程序集。 查看您的 IIS 服务是否在 32 位模式下运行。
它通过 DllSurrogate 机制工作,当您尝试加载错误位数的 com-dll 时,该机制会自动创建一个 DllHost 进程。 在这些情况下,您将获得隐式的进程间通信。 看看主要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.