现在的位置: 首页 > 综合 > 正文

OSVersion 在 MONO MacOS 上的Bug?

2013年08月18日 ⁄ 综合 ⁄ 共 2495字 ⁄ 字号 评论关闭

最近在做一个.NET跨平台的小工具,需要在程序中做了客户端运行在什么操作系统上的判断。

.NET Api提供了 System.Environment.OSVersion  封装,可以获取所在操作系统的信息。

因此我做了个小程序来测试一下各个平台返回的信息。当然,为了跨平台使用了MONO作为中间层进行部署。

我用的版本是 mono 2.6.7

 

 

将编译之后的OSInfoTest.exe分别部署到 MacOS 和 Linux Red Hat 上。

 

MacOS的运行结果:

 MacOS的运行结果

 

Linux的运行结果:

Linux的运行结果

 

如上图红色标记部分,Platform居然都是Unix!

System.Environment.OSVersion.Platform 返回的是一个 PlatformID 的枚举,里面可是定义着MacOSX的哦。

 

一顿查找之后发现这原来是一个MONO的Bug:[Mono-bugs] [Bug 515570]

找到原因了,但是这个Bug还没有被修正,还需要自己来解决这个问题啊:

不过好在可以利用MacOS的控制台信息来进行判断。

 

代码修改一下,加入了 IsRunningMacOS , GetMacOsInfo 两个方法。

一个方法是直接判断现在运行的OS是否是Mac,一个是通过调用Mac控制台获取当前OS版本信息。

 

好,再来运行一下:

修改后MacOS的运行结果

 

比较一下直接在 MacOS 上运行 "sw_vers" 的结果:

sw_vers

 

OK~ 搞定。

抱歉!评论已关闭.