承载概述

.NET Framework 应用程序会自动承载其生成所针对的公共语言运行时。 如果将托管代码编译为 .exe 程序集,则在运行 .exe 时,mscoree.dll 会自动启动运行时。 非托管应用程序也可通过承载公共语言运行时受益。 运行时提供了用于扩展应用程序(如 Internet Information Services (IIS) 和 SQL Server 2005)的框架。

.NET Framework 应用程序无论是通过托管 .exe 程序集自动调用的,还是使用非托管承载 API 加载的,都需要一段称为运行时主机的代码。 运行时主机会将运行时加载到进程中,在进程中创建应用程序域,然后在这些应用程序域内加载和执行用户代码。

.NET Framework 2.0 版本使承载 CLR 的应用程序可以控制运行时的许多功能。 可以用自定义实现替换某些功能(如内存分配和程序集加载)。 可以控制其他功能的行为,在运行时接收事件通知并管理应用程序域。

.NET Framework 4 版合并了 2.0 版承载 API 中的不少 API。 此外,.NET Framework 4 还支持进程内并行运行时主机激活,并提供了其他增强功能。

本概述包含以下几节:

  • 初始化和启动承载的运行时

  • .NET Framework 版本 2.0 承载管理接口

  • .NET Framework 版本 4 承载管理接口

  • 应用程序域管理器

  • 相关主题

  • 参考

初始化和启动承载的运行时

.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 接口。

.NET Framework 1 版本承载 API 提供了 ICorRuntimeHost 接口。

将公共语言运行时加载到进程中中讨论如何启动运行时,转换为托管的承载代码中讨论如何执行托管代码。

返回页首

.NET Framework 2.0 承载管理接口

在 .NET Framework 2.0 中,CLR 提供了用于控制所承载的运行时的许多功能的承载管理接口,宿主应用程序实现运行时提供的其他管理接口,并且使您可以实现自己的承载管理接口。

出于发现目的,管理接口可分成两大类:

  • 宿主实现的管理接口和运行时通过 IHostControl 接口发现的管理接口。

  • CLR 提供的管理接口和宿主通过 ICLRControl 接口发现的管理接口。

下表按它们所提供功能的种类对界面进行了分组。 每组中最重要的接口排在最前面。

功能

接口

程序集加载管理

允许宿主自定义从何处加载程序集、版本管理方式以及允许加载的程序集格式。 例如,可以从数据库而不是硬盘中的文件加载程序集。

CLR 使用 IHostControl 接口发现宿主是否实现了这一组接口。

IHostAssemblyManager

IHostAssemblyStore

ICLRAssemblyReferenceList

ICLRAssemblyIdentityManager

策略管理

允许宿主指定程序故障的处理方式,以便为不同的可靠性要求提供支持。

宿主使用 ICLRControl 接口访问运行时管理器,并为来自运行时的故障通知实现 IHostPolicyManager 回调。

ICLRPolicyManager

IHostPolicyManager

宿主保护管理

允许宿主通过阻止使用指定的类型或成员来强制执行它自己的编程模型。 例如,宿主可禁止使用线程或同步基元。

宿主使用 ICLRControl 接口访问运行时管理器。

ICLRHostProtectionManager

内存管理

允许宿主通过针对 CLR 用来分配内存的操作系统功能提供替换功能,来控制内存分配。

CLR 使用 IHostControl 接口发现宿主是否实现了这一组接口。

IHostMemoryManager

IHostMAlloc

ICLRMemoryNotificationCallback

垃圾回收管理

允许宿主实现用于接收垃圾回收开始和结束通知的方法。 允许宿主初始化收集操作,以收集统计信息、指定收集操作的某些特征。

宿主使用 ICLRControl 接口访问运行时管理器。 CLR 使用 IHostControl 接口发现宿主是否实现了这一组接口。

IHostGCManager

ICLRGCManager

调试管理

允许宿主发现是否附加了某个调试器,以提供其他调试信息、自定义调试任务。

宿主使用 ICLRControl 接口访问运行时管理器。

ICLRDebugManager

CLR 事件管理

允许宿主注册由 EClrEvent 枚举的事件的通知。

宿主使用 ICLRControl 接口访问运行时管理器,使用 IActionOnCLREvent 接口实现其事件处理程序。

ICLROnEventManager

IActionOnCLREvent

任务管理

当线程执行托管代码和非托管代码之间的转换时,可让宿主收到相应的通知。 可让宿主控制线程关联、任务的启动和停止时间以及任务的安排。

CLR 使用 IHostControl 接口发现宿主是否实现了这一组接口。

IHostTaskManager

ICLRTaskManager

IHostTask

ICLRTask

线程池管理

允许宿主实现自已的线程池以供运行时使用。

CLR 使用 IHostControl 接口发现宿主是否实现了这一组接口。

IHostThreadPoolManager

同步管理

允许宿主实现自已的同步基元以供运行时使用。 宿主可提供事件、临界区和信号量。

CLR 使用 IHostControl 接口发现宿主是否实现了这一组接口。

IHostSyncManager

ICLRSyncManager

IHostCrst

IHostManualEvent

IHostAutoEvent

IHostSemaphore

I/O 完成管理

允许宿主实现自已的异步输入/输出实现。

CLR 使用 IHostControl 接口发现宿主是否实现了这一组接口。

IHostIoCompletionManager

注意注意

.NET Framework 1.0 和 1.1 承载接口中记录了早期版本的运行时的承载接口。

返回页首

.NET Framework 4 承载管理接口

.NET Framework 4 合并了以下接口中的 2.0 承载 API:

  • ICLRMetaHost 提供了一些用于执行以下操作的方法:返回特定版本的 CLR,列出所有已安装的 CLR,列出所有进程内运行时,返回激活接口以及发现用于编译程序集的 CLR 版本。

  • ICLRMetaHostPolicy 提供了 GetRequestedRuntime 方法,该方法提供了一个基于策略标准、托管程序集、版本和配置文件的 CLR 接口。

  • ICLRRuntimeInfo 提供了返回有关特定运行时的信息的方法,这些信息包括版本、目录和加载状态。

  • ICLRStrongName 将 MSCorEE.dll 导出的所有 CLR 2.0 版本的强命名全局静态函数StrongNameErrorInfo 除外)组合到单个接口中。 所有 ICLRStrongName 方法都返回标准 COM HRESULT。

这些接口封装并取代 .NET Framework 2.0 承载接口。

返回页首

应用程序域管理器

对于承载公共语言运行时的程序,应用程序域通过将程序集彼此隔离,可提供更好的可靠性。 通过卸载应用程序域,可以从进程中卸载程序集。

为了管理多个应用程序域,.NET Framework 将提供 AppDomainManager 类作为基类,您可从该类派生自己的应用程序域管理器。 您为宿主应用程序设计的应用程序域管理器,本质上是宿主的扩展,采用托管代码。 它会自动加载到您的进程中创建的每个应用程序域中。

应用程序域管理器可通过消除托管代码和非托管代码之间的某些转换操作提高性能。 应用程序管理器会接收新应用程序域的创建通知,您可以利用这一机会配置这些应用程序域。 应用程序域管理器还为非托管宿主提供了调用托管代码的途径。

返回页首

相关主题

标题

说明

将公共语言运行时加载到进程中

说明如何将运行时载入进程,初始化运行时并设置值来指定其行为。

卸载域和关闭进程

说明如何卸载应用程序域和关闭进程。

设置基于角色的安全策略和主体

说明如何设置基于角色的安全性策略。

设置应用程序域级别的安全策略

说明如何设置应用程序域级别的安全策略。

加载和执行用户代码

说明如何加载和执行用户代码。

创建和配置应用程序域

说明如何创建和配置在其中运行用户代码的应用程序域。

确定应用程序域边界

说明如何确定设置新应用程序域边界的位置。

转换为托管的承载代码

说明如何转换非托管代码以执行托管承载代码和用户代码。

激活配置文件

描述如何激活应用程序配置文件中指定的运行时版本之外的运行时版本。

运行时宿主

描述 .NET Framework 附带的主机。

应用程序域

说明宿主用于隔离在进程中运行的代码的构造。

并行执行

说明如何运行应用程序、组件或运行时的多个版本。

.NET Framework 4 承载接口

说明用于承载 .NET Framework 4 版本中的运行时的非托管接口。

.NET Framework 2.0 承载接口

说明用于承载 .NET Framework 2.0 版本中的运行时的非托管接口。

返回页首

参考

System.AppDomainManager

返回页首