以编程方式确定Mono运行时版本

时间:2011-12-07 10:35:22

标签: c# .net mono

以编程方式确定Mono运行时版本的推荐方法是什么?

当我们的.Net应用程序与旧版本的Mono一起使用时,我们遇到了各种问题。有时我们可以解决这些问题,如果我们知道我们正在处理哪个版本,但有时我们不能。

我们的解决方案是以编程方式检测Mono版本,然后我们可以透明地应用解决方法。如果Mono版本太旧,那么我们会提示用户升级。

我们可以发现Mono是我们的运行时,有这样的东西:

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

我们怎样才能可靠地确定单声道版本而不间接推断它?需要说明的是,我们需要Mono版本号,而不是.Net CLR版本号。

3 个答案:

答案 0 :(得分:17)

您可以将单声道运行时版本检查为:

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

查看此How to determine the revision from which current Mono runtime was built and installed?了解详情。

答案 1 :(得分: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)

答案 2 :(得分:0)

您可以使用:

System.Reflection.Assembly.GetExecutingAssembly().ImageRuntimeVersion

它应该为您提供Mono CLR版本,作为奖励,它将在Windows上为您提供CLR版本。

http://msdn.microsoft.com/en-us/library/system.reflection.assembly.imageruntimeversion.aspx