How to detect which .NET runtime is being used (MS vs. Mono)?

那年仲夏 提交于 2019-11-26 08:20:07

问题


I would like to know during execution of a program whether it is being executed using the Mono runtime or the Microsoft runtime.

I\'m currently using the following code to determine whether I\'m on a MS CLR:

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

However, this is somewhat dependent on the installation folder of the runtime and I\'m not sure whether this will work on all installations.

Is there a better way to check for the current runtime?


回答1:


From the Mono Project's Guide to Porting Winforms Applications:

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

I'm sure you'll have a lot more questions, so worth checking this guide and the mono-forums




回答2:


You can check for the Mono Runtime Like this

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



回答3:


With the advent of C# 6, this can now be turned into a get-only property, so the actual check is only done once.

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



回答4:


just run the below code..

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



回答5:


Here's a version with caching that I'm using in my project:

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

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

As @ahmet alp balkan mentioned, caching is useful here if you're calling this frequently. By wrapping it in a Lazy<bool>, the reflection call only happens once.



来源:https://stackoverflow.com/questions/721161/how-to-detect-which-net-runtime-is-being-used-ms-vs-mono

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!