代码之家  ›  专栏  ›  技术社区  ›  Magnus Johansson

有没有办法强制“任意CPU”编译的应用程序在64位操作系统上以32位模式运行?

  •  11
  • Magnus Johansson  · 技术社区  · 15 年前

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

    1 回复  |  直到 15 年前
        1
  •  11
  •   Simon P Stevens    15 年前

    我相信你能做到这一点 CorFlags.exe

    比如:
    CorFlags yourassembly.exe/32位+

    请注意,如果程序集是强命名的,则还必须使用/force选项,该选项会中断强命名,因此您必须退出程序集。

        2
  •  1
  •   anchur    4 年前

    我有了一个新的解决方案!

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

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

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

    有一个关于托管核心CLR的教程: Write a custom .NET Core host to control the .NET runtime from your native code .

    Hosting the CLR the Right Way .