如果我有一个使用“Any CPU”编译的.NET应用程序,它将在64位操作系统上以64位模式运行。
但是如果出于某种原因,我想强制该应用程序以32位模式运行(就像使用“x86”编译一样),重新编译不是一个选择,那么在运行时配置是否可能?也许可以通过.manifest文件实现吗?
但是如果出于某种原因,我想强制该应用程序以32位模式运行(就像使用“x86”编译一样),重新编译不是一个选择,那么在运行时配置是否可能?也许可以通过.manifest文件实现吗?
我相信你可以使用CorFlags.exe 来完成这个操作。
类似下面的命令:
CorFlags yourassembly.exe /32BIT+
请注意,如果程序集是强名称(strong named),您还必须使用 /force 选项来取消强制签名,因此您需要重新签名该程序集。
我有一个新的解决方案!
编写自定义的.NET宿主是这个问题的更好解决方案。因为宿主是本地应用程序,如果您将其编译为32/64位应用程序,则加载的程序集将在32/64位模式下运行。
不需要担心托管,因为.NET构建过程提供默认宿主来运行.NET应用程序。但在某些特殊情况下,明确地托管.NET运行时可能会很有用。
因此,您可以准备两个宿主(C ++应用程序),一个构建为32位应用程序,另一个构建为64位。并制作一个启动器(exe或脚本),以调用您喜欢的模式的宿主。宿主将以与主机相同的模式加载和运行您的程序集。
关于托管Core CLR,有一个教程: 编写自定义.NET Core宿主以控制.NET运行时从您的本机代码。
如果您的程序集是.net框架应用程序,请参阅正确托管CLR。