我怎么知道哪个运行时主机当前运行我的代码?

时间:2013-06-11 09:01:22

标签: .net clr clr-hosting

由于Microsoft文档声明Runtime Hosts .NET有多个运行时主机来支持和执行我们的应用程序代码,我的问题是如何知道Microsoft运行时主机的哪些运行时主机,托管我的代码。

我正在使用C#语言开发可由各种运行时主机使用和/或托管的dll类库,因此我需要知道哪个运行时主机现在托管我的代码以满足指定条件。

2 个答案:

答案 0 :(得分:1)

确实有一种简单的方法可以确定CLR的当前运行时版本。碰巧的是,如果由于SxS(并排)执行,您的代码当前在不同的CLR中运行,Environment.Version将返回不同的版本。

要查看在同时具有两个运行时的应用程序中如何实际运行,请查看this article on Demonstrating Side by Side execution

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。也不可能to run .NET 1.0 or .NET 1.1 side by side with .NET 2.0 in .NET 4.0(虽然在.NET 4.0中可以并行运行1.0或1.1)。

答案 1 :(得分:0)

.NET Framework 4托管API提供CLRCreateInstance函数,该函数可以返回ICLRMetaHost接口。然后,您可以在此接口上调用GetRuntime方法,以获取特定的CLL版本的特定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