如何在Mono和.NET中检测支持的框架体系结构(x86或x86-64)?

时间:2010-11-15 11:19:37

标签: .net mono x86 x86-64

在.NET / Windows中,有PROCESSOR_ARCHITECTURE环境变量,用于标识正在运行的进程是x32,x64还是IA64。

还有GetNativeSystemInfo API方法可以判断Windows操作系统是否支持x86-64。

只要x86版本在Windows x64上可用,是否总会有x64版本的.NET Framework?或者有没有办法检测机器上.NET安装支持哪些平台?

Mono / Linux或其他非Microsoft实现怎么样? x86版的Mono可以在x86-64 Linux上运行吗?如何(以编程方式)检测Mono安装支持的平台?

已添加16.11.2010

我正在开发一种插件系统(好吧,我知道有AddIns系统,但它太多了管道组件)。我想要做的是找出在运行过程中可以加载哪些类型的组件(由平台中立组件表示)以及系统在隔离过程中可以执行哪些组装体系结构。
为系统中的每个体系结构创建测试程序集并尝试启动它的解决方案看起来并不优雅。

3 个答案:

答案 0 :(得分:0)

  

只要x86版本在Windows x64上可用,是否总会有x64版本的.NET Framework?

考虑一下这是不是真的。这意味着在x64版本的Windows上,只能安装x86或仅安装x64 .NET。但是MS没有这样的安装程序,因此只能使用第三方自定义安装程序。

除了可能违反MS EULA之外,我非常不愿意相信这样的安装(还有什么错过了它?它是否已经得到了.NET的一部分应该正确安装?)

由于MS安装可以免费使用,似乎没有人愿意投入工作来创建这样的自定义安装我得出结论:在x64 Windows上,如果安装了一个比特的.NET,那么它就安装了。< / p>

(注意,如果我没记错,这在.NET 2之前不适用,对于1.1和1.0,没有x64 .NET。)

答案 1 :(得分:0)

检查Environment.Is64BitProcess

另一方面,为什么需要检测这个?我能想到的唯一有效场景是P / Invoke,它已经加载了正确的(x86 / x64 /其他)版本的二进制库。此外,还有更多可能的架构而不是x86和x64:即使将代码限制为Microsoft .Net实现,您也可以在Itanium上运行。

答案 2 :(得分:0)

对于其他平台,请参见此处:

http://mjhutchinson.com/journal/2010/01/25/integrating_gtk_application_mac

它有一些代码可以更可靠地检测OS X,它将自己标识为UNIX。