并行执行
并行执行是在同一台计算机上运行应用程序或组件的多个版本的能力。 在同一台计算机上,可以同时安装公共语言运行时的多个版本,还可以同时安装使用运行时的某个版本的应用程序和组件的多个版本。
下图显示了几个应用程序,这些应用程序使用同一计算机上两个不同的运行时版本。 应用程序 A、B 和 C 使用运行时 1.0 版,而应用程序 D 使用运行时 1.1 版。
两个运行时版本的并行执行
.NET Framework 由公共语言运行时和大约二十四个包含 API 类型的程序集组成。 运行时和 .NET Framework 程序集分别采用不同的版本。 例如,运行时的 1.0 版实际上是 1.0.3705.0 版,而 .NET Framework 程序集的 1.0 版实际上是 1.0.3300.0 版。
下图显示了在同一台计算机上使用一个组件的两种不同版本的几个应用程序。 应用程序 A 和 B 使用组件的 1.0 版,而应用程序 C 使用同一组件的 2.0 版。
一个组件的两种版本的并行执行
利用并行执行,可更好地控制应用程序所绑定的组件的版本,并可更好地控制应用程序所使用的运行时的版本。
并行 (Side-by-Side) 执行的优点
在 Windows XP 和 .NET Framework 之前,发生 DLL 冲突的原因是应用程序不能区别同一代码的不同的不兼容版本。 包含在 DLL 中的类型信息仅绑定到文件名。 应用程序无法知道包含在 DLL 中的类型是否同用来生成该应用程序的类型相同。 因此,组件的新版本会覆盖旧版本,并会破坏应用程序。
为消除 DLL 冲突,并行执行和 .NET Framework 提供了下列功能:
具有强名称的程序集。
并行执行利用具有强名称的程序集将类型信息绑定到程序集的特定版本。 这可防止应用程序或组件绑定到程序集的无效版本。 具有强名称的程序集还允许同一计算机上存在一个文件的多个版本,并且还允许应用程序使用一个文件的多个版本。 有关更多信息,请参见具有强名称的程序集。
版本识别代码存储。
.NET Framework 在全局程序集缓存中提供了版本识别代码存储。 全局程序集缓存是全计算机范围的代码缓存,存在于所有安装了 .NET Framework 的计算机上。 它根据版本、区域性和发行者信息存储程序集,并且支持组件和应用程序的多个版本。 有关更多信息,请参见全局程序集缓存。
隔离。
使用 .NET Framework 可以创建以隔离方式执行的应用程序和组件。 隔离是并行执行的基本组成部分。 隔离时需要了解正在使用的资源以及在应用程序或组件的多个版本间安全地共享的资源。 隔离还包括使用版本特定的方式存储文件。 有关隔离的更多信息,请参见 并行 (Side-by-Side) 执行的应用程序和组件的创建指南。
版本兼容性
按照设计,.NET Framework 1.0 版和 1.1 版可相互兼容。 使用 .NET Framework 1.0 版生成的应用程序应当能够在 1.1 版上运行,而使用 .NET Framework 1.1 版创建的应用程序也应当能够在 1.0 版上运行。 但是要注意,.NET Framework 1.1 版中添加的 API 功能无法在 .NET Framework 1.0 版中运行。 使用 2.0 版创建的应用程序只能在 2.0 版上运行。 2.0 版应用程序不能在 1.1 版或更早的版本上运行。
.NET Framework 的版本被视为由运行时及其关联的 .NET Framework 程序集构成的单个单元(这一概念称为程序集统一)。 可以重定向程序集绑定,使其包括 .NET Framework 程序集的其他版本,但是,重写默认的程序集绑定可能会很危险,因此部署前必须进行严格测试。
相关主题
标题 |
说明 |
---|---|
描述运行时如何查找有关为某一应用程序加载什么版本的运行时的信息。 |
|
讨论运行时如何处理对不同版本的 .NET Framework 程序集的引用。 |
|
讨论运行时在确定为应用程序加载的运行时版本时所经过的步骤。 |
|
描述如何将应用程序绑定到程序集的特定版本。 |
|
讨论在计划并行执行的应用程序中使用部分限定的程序集引用的含义。 |
|
提供有关使用发行者策略文件对程序集绑定进行重定向的信息和过程。 |
|
讨论在并行执行中如何处理附属程序集。 |
|
提供有关安装和使用 .NET Framework 的多个版本的信息。 |
|
描述如何创建应用程序可用以确定公共语言运行时版本的配置文件。 |
|
提供有关如何创建并部署适用于并行执行的应用程序和组件的信息。 |
|
讨论如何为版本化的组件和应用程序创建维护模型。 |
|
讨论如何可以使用进程内并行运行时主机激活在单个进程中运行多个 CLR 版本。 |
|
提供程序集的概念性概述。 |
|
提供应用程序域的概念性概述。 |