问题
I would like to know during execution of a program whether it is being executed using the Mono runtime or the Microsoft runtime.
I\'m currently using the following code to determine whether I\'m on a MS CLR:
static bool IsMicrosoftCLR()
{
return RuntimeEnvironment.GetRuntimeDirectory().Contains(\"Microsoft\");
}
However, this is somewhat dependent on the installation folder of the runtime and I\'m not sure whether this will work on all installations.
Is there a better way to check for the current runtime?
回答1:
From the Mono Project's Guide to Porting Winforms Applications:
public static bool IsRunningOnMono ()
{
return Type.GetType ("Mono.Runtime") != null;
}
I'm sure you'll have a lot more questions, so worth checking this guide and the mono-forums
回答2:
You can check for the Mono Runtime Like this
bool IsRunningOnMono = (Type.GetType ("Mono.Runtime") != null);
回答3:
With the advent of C# 6, this can now be turned into a get-only property, so the actual check is only done once.
internal static bool HasMono { get; } = Type.GetType("Mono.Runtime") != null;
回答4:
just run the below code..
static bool IsMicrosoftCLR()
{
return (Type.GetType ("Mono.Runtime") == null)
}
回答5:
Here's a version with caching that I'm using in my project:
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;
}
}
As @ahmet alp balkan mentioned, caching is useful here if you're calling this frequently. By wrapping it in a Lazy<bool>, the reflection call only happens once.
来源:https://stackoverflow.com/questions/721161/how-to-detect-which-net-runtime-is-being-used-ms-vs-mono