Подтвердить что ты не робот

Как определить, какая среда выполнения .NET используется (MS vs. Mono)?

Я хотел бы знать во время выполнения программы, выполняется ли она с использованием среды выполнения Mono или среды выполнения Microsoft.

В настоящее время я использую следующий код, чтобы определить, находится ли я в MS CLR:

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

Однако это несколько зависит от папки установки среды выполнения, и я не уверен, будет ли это работать на всех установках.

Есть ли лучший способ проверить текущую среду выполнения?

4b9b3361

Ответ 2

Вы можете проверить Mono Runtime Как этот

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

Ответ 3

просто запустите код ниже.

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

Ответ 4

С появлением С# 6 это теперь можно превратить в свойство get-only, поэтому фактическая проверка выполняется только один раз.

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

Ответ 5

Здесь версия с кешированием, которую я использую в своем проекте:

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;
    }
}

Как упоминалось в @ahmet alp balkan, кеширование полезно здесь, если вы часто это называете. Обернув его в Lazy<bool>, вызов отражения произойдет только один раз.