Как определить, какая среда выполнения .NET используется (MS vs. Mono)?
Я хотел бы знать во время выполнения программы, выполняется ли она с использованием среды выполнения Mono или среды выполнения Microsoft.
В настоящее время я использую следующий код, чтобы определить, находится ли я в MS CLR:
static bool IsMicrosoftCLR()
{
return RuntimeEnvironment.GetRuntimeDirectory().Contains("Microsoft");
}
Однако это несколько зависит от папки установки среды выполнения, и я не уверен, будет ли это работать на всех установках.
Есть ли лучший способ проверить текущую среду выполнения?
Ответы
Ответ 1
Из проекта Mono Руководство по переносу приложений Winforms:
public static bool IsRunningOnMono ()
{
return Type.GetType ("Mono.Runtime") != null;
}
Уверен, у вас будет гораздо больше вопросов, поэтому стоит проверить это руководство и моно-форумы
Ответ 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>
, вызов отражения произойдет только один раз.