21

我找不到任何真正有效的方法来正确检测我的 C# 程序在哪个平台(Windows / Linux / Mac)上运行,尤其是在返回 Unix 并且几乎无法与 Linux 平台区分开来的 Mac 上!

所以我根据 Mac 的特殊性做了一些不那么理论化、更实用的东西。

我正在发布工作代码作为答案。请评论它是否也适合您/可以改进。

谢谢 !

回复 :

这是工作代码!

    public enum Platform
    {
        Windows,
        Linux,
        Mac
    }

    public static Platform RunningPlatform()
    {
        switch (Environment.OSVersion.Platform)
        {
            case PlatformID.Unix:
                // Well, there are chances MacOSX is reported as Unix instead of MacOSX.
                // Instead of platform check, we'll do a feature checks (Mac specific root folders)
                if (Directory.Exists("/Applications")
                    & Directory.Exists("/System")
                    & Directory.Exists("/Users")
                    & Directory.Exists("/Volumes"))
                    return Platform.Mac;
                else
                    return Platform.Linux;

            case PlatformID.MacOSX:
                return Platform.Mac;

            default:
                return Platform.Windows;
        }
    }
4

2 回答 2

8

也许可以查看Pinta 源代码中的IsRunningOnMac方法:

于 2012-04-13T11:50:56.523 回答
4

根据Environment.OSVersion 属性页面上的注释:

Environment.OSVersion 属性不提供一种可靠的方法来识别确切的操作系统及其版本。因此,我们不建议您使用此方法。相反:要识别操作系统平台,请使用 RuntimeInformation.IsOSPlatform 方法。

RuntimeInformation.IsOSPlatform 可以满足我的需要。

if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
{
    // Your OSX code here.
}
elseif (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
    // Your Linux code here.
}
于 2019-01-31T23:54:45.943 回答