如何检测正在使用哪个.NET运行时(MS与Mono)?
我想知道在程序的执行过程中,它是使用Mono运行时还是Microsoft运行时执行的。
我目前使用下面的代码来确定我是否在MS CLR上:
static bool IsMicrosoftCLR() { return RuntimeEnvironment.GetRuntimeDirectory().Contains("Microsoft"); }
但是,这有点依赖于运行时的安装文件夹,我不确定这是否适用于所有安装。
有没有更好的方法来检查当前的运行时间?
从Mono项目指南移植Winforms应用程序 :
public static bool IsRunningOnMono () { return Type.GetType ("Mono.Runtime") != null; }
我相信你会有更多的问题,所以值得检查本指南和单论坛
你可以检查单声道运行时像这样
bool IsRunningOnMono = (Type.GetType ("Mono.Runtime") != null);
只需运行下面的代码
static bool IsMicrosoftCLR() { return (Type.GetType ("Mono.Runtime") == null) }
随着C#6的出现,现在可以变成一个只读属性,所以实际的检查只做一次。
internal static bool HasMono { get; } = Type.GetType("Mono.Runtime") != null;
以下是我在项目中使用的caching版本:
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所提到的那样,如果你频繁地调用它,caching在这里很有用。 通过将其包装在Lazy<bool>
,reflection调用只发生一次。