Dot-Net

有沒有辦法強制“任何 CPU”編譯的應用程序在 64 位作業系統上以 32 位模式執行?

  • September 21, 2020

如果我有一個“任何 CPU”編譯的 .NET 應用程序,它將在 64 位作業系統上以 64 位模式執行。

但是,如果我出於某種原因想要強制此應用程序以 32 位模式執行。(好像它是使用“x86”編譯的)。重新編譯不是一個選項,所以這可以在執行時配置嗎?也許是 .manifest 文件?

我相信你可以用CorFlags.exe做到這一點

類似於:

CorFlags yourassembly.exe /32BIT+

請注意,如果程序集是強命名的,您還必須使用 /force 選項來破壞強命名,因此您必須退出程序集。

我有一個新的解決方案!

編寫自定義 .NET 主機是解決此問題的更好方法。由於主機是原生應用程序,如果將其編譯為 32/64 位應用程序,它載入的程序集將在 32/64 位模式下執行。

無需擔心託管,因為 .NET 建構過程提供了預設主機來執行 .NET 應用程序。但是,在某些特殊情況下,顯式託管 .NET 執行時會很有用。

因此,您可以準備兩個主機(C++ 應用程序),一個建構為 32 位應用程序,另一個建構為 64 位。並啟動(exe 或腳本)呼叫您喜歡的主機模式。主機將以與主機相同的模式載入和執行您的程序集。

有一篇關於 Hosting Core CLR 的教程: 編寫一個自定義的 .NET Core 主機來從您的本機程式碼控制 .NET 執行時

如果您的程序集是 .net 框架應用程序,請參閱以正確方式託管 CLR

引用自:https://stackoverflow.com/questions/985663