7

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

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

4

2 回答 2

1

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

要了解它在一个可以同时具有两个运行时的应用程序中是如何工作的,请查看这篇关于并行执行演示的文章

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 1.0 或 .NET 1.1也不可能与 .NET 4.0 中的 .NET 2.0 并排运行(尽管在 .NET 4.0 中仅并排运行 1.0 或 1.1 是可能的)。

于 2013-12-11T13:54:30.513 回答
0

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

于 2013-06-12T11:28:33.237 回答