当前位置:  开发笔记 > 编程语言 > 正文

如何检测正在使用的.NET运行时(MS与Mono)?

如何解决《如何检测正在使用的.NET运行时(MS与Mono)?》经验,为你挑选了5个好方法。

我想知道在程序执行期间是使用Mono运行时还是Microsoft运行时执行它.

我目前正在使用以下代码来确定我是否在使用MS CLR:

static bool IsMicrosoftCLR()
{
    return RuntimeEnvironment.GetRuntimeDirectory().Contains("Microsoft");
}

但是,这在某种程度上取决于运行时的安装文件夹,我不确定这是否适用于所有安装.

有没有更好的方法来检查当前的运行时?



1> Mystic..:

从Mono项目的移植Winforms应用程序指南:

public static bool IsRunningOnMono ()
{
    return Type.GetType ("Mono.Runtime") != null;
}

我相信你会有更多的问题,所以值得查看本指南和单声道论坛


您可能也希望保存(缓存)结果,每次调用反射可能都很昂贵.

2> 小智..:

您可以检查Mono Runtime

bool IsRunningOnMono = (Type.GetType ("Mono.Runtime") != null);



3> RobinHood70..:

随着C#6的出现,现在可以将其转换为get-only属性,因此实际检查只进行一次.

internal static bool HasMono { get; } = Type.GetType("Mono.Runtime") != null;



4> Binoj Antony..:

只需运行以下代码..

static bool IsMicrosoftCLR()
{
    return (Type.GetType ("Mono.Runtime") == null)
}



5> Nate Barbett..:

这是我在项目中使用的缓存版本:

public static class PlatformHelper
{
    private static readonly Lazy IsRunningOnMonoValue = new Lazy(() =>
    {
        return Type.GetType("Mono.Runtime") != null;
    });

    public static bool IsRunningOnMono()
    {
        return IsRunningOnMonoValue.Value;
    }
}

正如@ahmet alp balkan所提到的,如果你频繁地调用它,缓存在这里很有用.通过将其包装在a中Lazy,反射调用仅发生一次.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有