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

Программное определение версии исполнения Mono

Каков рекомендуемый способ программно определить версию исполнения Mono?

Мы столкнулись с различными проблемами, когда наше .Net-приложение используется со старыми версиями Mono. Иногда мы можем обойти эти проблемы, если мы знаем, с какой версией мы имеем дело, но иногда мы не можем.

Решение для нас будет заключаться в том, чтобы программно определить версию Mono, а затем мы можем прозрачно применять обходные пути. Если версия Mono слишком старая, мы предложим пользователю обновить.

Мы можем обнаружить, что Mono - это наша среда выполнения с чем-то вроде этого:

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

Как мы можем также надежно определить моно версию, не указав ее косвенно? Чтобы быть ясным, нам нужен номер выпуска Mono, а не номер версии .Net CLR.

4b9b3361

Ответ 1

Вы можете проверить версию исполнения mono как:

Type type = Type.GetType("Mono.Runtime");
if (type != null)
{
    MethodInfo displayName = type.GetMethod("GetDisplayName", BindingFlags.NonPublic | BindingFlags.Static);
    if (displayName != null)
        Console.WriteLine(displayName.Invoke(null, null));
}

Проверьте как определить версию, из которой была построена и установлена ​​текущая среда исполнения Mono?.

Ответ 2

Вот еще одно решение (без использования отражения)

[DllImport("__Internal", EntryPoint="mono_get_runtime_build_info")]
public extern static string GetMonoVersion();


Console.WriteLine("Mono version: {0}",GetMonoVersion());
Mono version: 3.12.0 (tarball Sat Feb  7 19:13:43 UTC 2015)