Программное определение версии исполнения Mono
Каков рекомендуемый способ программно определить версию исполнения Mono?
Мы столкнулись с различными проблемами, когда наше .Net-приложение используется со старыми версиями Mono. Иногда мы можем обойти эти проблемы, если мы знаем, с какой версией мы имеем дело, но иногда мы не можем.
Решение для нас будет заключаться в том, чтобы программно определить версию Mono, а затем мы можем прозрачно применять обходные пути. Если версия Mono слишком старая, мы предложим пользователю обновить.
Мы можем обнаружить, что Mono - это наша среда выполнения с чем-то вроде этого:
bool isMonoRuntime = Type.GetType("Mono.Runtime") != null;
Как мы можем также надежно определить моно версию, не указав ее косвенно? Чтобы быть ясным, нам нужен номер выпуска Mono, а не номер версии .Net CLR.
Ответы
Ответ 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)
Ответ 3
Вы можете использовать это:
System.Reflection.Assembly.GetExecutingAssembly().ImageRuntimeVersion
Он должен предоставить вам версию Mono CLR, и в качестве бонуса он предоставит вам версию CLR в Windows.
http://msdn.microsoft.com/en-us/library/system.reflection.assembly.imageruntimeversion.aspx