我想知道在程序执行期间是使用Mono运行时还是Microsoft运行时执行它.
我目前正在使用以下代码来确定我是否在使用MS CLR:
static bool IsMicrosoftCLR() { return RuntimeEnvironment.GetRuntimeDirectory().Contains("Microsoft"); }
但是,这在某种程度上取决于运行时的安装文件夹,我不确定这是否适用于所有安装.
有没有更好的方法来检查当前的运行时?
从Mono项目的移植Winforms应用程序指南:
public static bool IsRunningOnMono () { return Type.GetType ("Mono.Runtime") != null; }
我相信你会有更多的问题,所以值得查看本指南和单声道论坛
您可以检查Mono Runtime
bool IsRunningOnMono = (Type.GetType ("Mono.Runtime") != null);
随着C#6的出现,现在可以将其转换为get-only属性,因此实际检查只进行一次.
internal static bool HasMono { get; } = Type.GetType("Mono.Runtime") != null;
只需运行以下代码..
static bool IsMicrosoftCLR() { return (Type.GetType ("Mono.Runtime") == null) }
这是我在项目中使用的缓存版本:
public static class PlatformHelper { private static readonly LazyIsRunningOnMonoValue = new Lazy (() => { return Type.GetType("Mono.Runtime") != null; }); public static bool IsRunningOnMono() { return IsRunningOnMonoValue.Value; } }
正如@ahmet alp balkan所提到的,如果你频繁地调用它,缓存在这里很有用.通过将其包装在a中Lazy
,反射调用仅发生一次.