12

如果我有一个“任何 CPU”编译的 .NET 应用程序,它将在 64 位操作系统上以 64 位模式运行。

但是,如果我出于某种原因想要强制此应用程序以 32 位模式运行。(好像它是使用“x86”编译的)。重新编译不是一个选项,所以这可以在运行时配置吗?也许是 .manifest 文件?

4

2 回答 2

11

我相信你可以用CorFlags.exe做到这一点

类似于:
CorFlags yourassembly.exe /32BIT+

请注意,如果程序集是强命名的,您还必须使用 /force 选项来破坏强命名,因此您必须退出程序集。

于 2009-06-12T08:53:19.720 回答
1

我有一个新的解决方案!

编写自定义 .NET 主机是解决此问题的更好方法。由于主机是原生应用程序,如果将其编译为 32/64 位应用程序,它加载的程序集将在 32/64 位模式下运行。

无需担心托管,因为 .NET 构建过程提供了默认主机来运行 .NET 应用程序。但是,在某些特殊情况下,显式托管 .NET 运行时会很有用。

因此,您可以准备两个主机(C++ 应用程序),一个构建为 32 位应用程序,另一个构建为 64 位。并启动(exe 或脚本)调用您喜欢的主机模式。主机将以与主机相同的模式加载和运行您的程序集。

有一篇关于 Hosting Core CLR 的教程: 编写一个自定义的 .NET Core 主机来从您的本机代码控制 .NET 运行时

如果您的程序集是 .net 框架应用程序,请参阅以正确方式托管 CLR

于 2020-09-21T03:24:03.620 回答