由于Microsoft文档声明Runtime Hosts .NET有多个运行时主机来支持和执行我们的应用程序代码,我的问题是如何知道Microsoft运行时主机的哪些运行时主机,托管我的代码。
我正在使用C#语言开发可由各种运行时主机使用和/或托管的dll类库,因此我需要知道哪个运行时主机现在托管我的代码以满足指定条件。
答案 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接口,该接口用于启动运行时并执行托管代码。