由于微软文档声明运行时主机。net有多个运行时主机来支持和执行我们应用程序的代码,我的问题是我如何知道微软运行时主机的哪个运行时主机托管我的代码。
我使用c#语言来开发dll类库,它可以被各种运行时主机使用和/或托管,所以我需要知道哪个运行时主机现在托管我的代码以满足指定的条件。
实际上有一种非常简单的方法来确定CLR的当前运行时版本。如果你的代码由于SxS (Side-by-Side)执行而当前运行在不同的CLR中,那么Environment.Version
将返回一个不同的版本。
要了解在可以同时有两个运行时的应用程序中如何实际工作,请查看这篇关于演示并排执行的文章。
if(Environment.Version.StartsWith("2.0"))
System.Console.WriteLine("Inside .NET CLR 2.0");
else if(Environment.Version.StartsWith("4.0"))
System.Console.WriteLine("Inside .NET CLR 4.0");
else
System.Console.WriteLine("Unknown .NET version");
请注意。net 2.0加载器将加载。net 2.0可用的最新CLR,在大多数情况下是。net 3.5。不可能在一个进程中同时运行不同版本的。net 2.0。也不可能在。net 4.0中同时运行。net 1.0或。net 1.1和。net 2.0(但在。net 4.0中可以同时运行1.0或。1.1)。
. net Framework 4托管API提供了CLRCreateInstance函数,该函数可以返回ICLRMetaHost接口。然后,在给定特定CLR版本的情况下,可以调用该接口上的GetRuntime方法来获取特定的ICLRRuntimeInfo接口。这个过程取代了。net Framework 2.0托管API使用的CorBindToRuntimeEx方法。
. net Framework 2.0版托管API提供了CorBindToRuntimeEx函数来初始化运行时。您可以选择加载哪个版本的运行时,但是一个进程只能承载一个版本。如果加载了2.0、3.0或3.5版本,则该函数返回ICLRRuntimeHost接口,该接口用于启动运行时并执行托管代码。来源:http://msdn.microsoft.com/en-us/library/dd380850.aspx