ASP.NET 并行 (Side-by-Side) 概述

更新:2007 年 11 月

.NET Framework 允许在同一台计算机上安装公共语言运行库的多个版本。默认情况下,在已经安装了运行库的计算机上安装 .NET Framework 时,所有的 ASP.NET 应用程序都会自动更新为使用该版本的 .NET Framework。尽管更高版本的 .NET Framework 具有向后兼容性,您仍可能需要相应地配置 ASP.NET 应用程序以使用特定版本的运行库。

本主题包括:

  • 方案

  • <此处为您的技术> 功能

  • 背景

  • 代码示例

  • 类参考

  • 其他资源

  • 新增功能

方案

返回页首

功能

返回页首

背景

传统上,如果在一台计算机上更新了一个组件或应用程序,旧的版本将被删除,并为新的版本所替换。如果新的版本与以前的版本不兼容,这通常会破坏使用这一组件或应用程序的其他应用程序。.NET Framework 能够对并行执行提供支持,这种功能允许在同一台计算机上同时安装程序集或应用程序的多个版本。由于可以同时安装多个版本,托管应用程序能够选择要使用的版本,同时不会影响使用不同版本的其他应用程序。

在 ASP.NET 中,如果不同的应用程序安装在同一台计算机上,但分别使用不同的 .NET Framework 版本,我们就说它们是并行运行的。下列主题描述 ASP.NET 中对并行功能的支持,还描述如何针对并行执行相应地配置 ASP.NET 应用程序。

.NET Framework 允许在同一台计算机上安装公共语言运行库的多个版本。默认情况下,在已经安装了运行库的计算机上安装 .NET Framework 时,所有的 ASP.NET 应用程序都会自动更新为使用该版本的 .NET Framework。唯一的例外是那些绑定到不兼容的运行库版本或更新的运行库版本的应用程序。(兼容性通常由 .NET Framework 版本号决定。主版本号的差别通常无法兼容,而次要更新和内部版本号的差别通常是可以兼容的。)尽管更高版本的 .NET Framework 具有向后兼容性,您仍可能需要相应地配置 ASP.NET 应用程序以使用特定版本的运行库。

ASP.NET 应用程序的脚本映射

如果在同一计算机上安装了多个版本的 .NET Framework,则这些安装各包含自己的 ASP.NET ISAPI 扩展版本 (Aspnet_isapi.dll)。ASP.NET ISAPI 扩展决定了应用程序使用的 .NET Framework 版本。您可以将 ASP.NET 应用程序配置为使用任何 ASP.NET ISAPI 扩展。若要指定 ASP.NET 应用程序所使用的 ASP.NET ISAPI 扩展,应在 Internet 信息服务 (IIS) 中为该应用程序注册脚本映射(有时称为“应用程序映射”)。

脚本映射将文件扩展名(如 .aspx)及 HTTP 谓词(如 GET 和 POST)与适当的 ISAPI 扩展相关联。例如,如果 IIS 接收到对某一 .aspx 文件的请求,该应用程序的脚本映射就会指示 IIS 将这个 .aspx 文件发送给适当版本的 ASP.NET ISAPI 扩展。每个 ASP.NET 应用程序的脚本映射通常是在 Internet 信息服务管理控制台中设置的,可以直接将它应用到某一应用程序,也可以从父应用程序继承它。默认情况下,安装了 .NET Framework 之后,会自动更新所有现有 ASP.NET 应用程序的脚本映射以使用新的 ASP.NET ISAPI 扩展,除非应用程序使用更高版本或不兼容的版本。

为使重新配置 ASP.NET 应用程序的脚本映射更容易,每个 .NET Framework 安装都提供自己的 ASP.NET IIS 注册工具 (Aspnet_regiis.exe) 版本。默认情况下,该工具安装在以下目录:

%system root%\Microsoft.NET\Framework\版本号

可以使用该工具将 ASP.NET 应用程序映射到与工具匹配的 ASP.NET ISAPI 扩展版本。

a99txfy5.alert_note(zh-cn,VS.90).gif说明:

因为 Aspnet_regiis.exe 与特定版本的 .NET Framework 相关联,所以您必须使用适当版本的 Aspnet_regiis.exe 为 ASP.NET 应用程序重新配置脚本映射。Aspnet_regiis.exe 工具仅将 ASP.NET 应用程序的脚本映射重新配置到与工具匹配的 ASP.NET ISAPI 扩展版本。

此工具也可用来显示所有已安装的 ASP.NET 版本的状态、注册关联的 ASP.NET 版本、创建客户端脚本目录以及执行其他配置操作。

有关脚本映射和 IIS 配置的更多信息,请参见“Setting Application Mappings in IIS 6.0 (IIS 6.0)”(在 IIS 6.0 中设置应用程序映射 (IIS 6.0))。有关为 ASP.NET 应用程序更新脚本映射的更多信息,请参见 ASP.NET IIS 注册工具 (Aspnet_regiis.exe)

ASP.NET 性能计数器

有了性能计数器,您就可以使用 Windows 性能控制台监控 ASP.NET 的操作。各个版本的 .NET Framework 分别安装一组不同的性能计数器对象来监控 ASP.NET 应用程序和整个 ASP.NET。这些对象分别使用“ASP.NET Apps v.X.X.XXXX.X”和“ASP.NET v.X.X.XXXX.X”命名规则,其中 v.X.X.XXXX.X 表示 ASP.NET 的版本。

另外,.NET Framework 还安装了适用于所安装的任何 ASP.NET 版本的 ASP.NET 系统和 ASP.NET 应用程序性能计数器。虽然这些计数器可用于所有版本的 ASP.NET,但是它们针对的总是安装的最新版本。如果最新版本的 ASP.NET 被卸载,这些计数器会重新自动与剩下的最新版本的 ASP.NET 相关联。

ASP.NET 状态服务

ASP.NET 状态服务可用于管理计算机上的会话状态。同一计算机上安装的所有 ASP.NET 版本共享与最新版本的 ASP.NET 一起安装的状态服务。这一版本使用名为 aspnet_state 的服务注册。因此,当卸载这一版本的 ASP.NET 后,计算机上剩下的最新版本的服务就会注册并取代它的位置。有关 ASP.NET 状态服务的更多信息,请参见 会话状态模式

ASP.NET SQL 状态服务器

ASP.NET SQL 状态服务器用于管理计算机上 SQL 中的会话状态。同一计算机上安装的所有 ASP.NET 版本共享与最新版本的 ASP.NET 一起安装的 SQL 状态服务器。当卸载这一版本的 ASP.NET 时,计算机上剩下的最新版本就会注册并取代它的位置。有关 ASP.NET SQL 状态服务器的更多信息,请参见 会话状态模式

管理多个版本的 ASP.NET

使用 .NET Framework,您可以在同一台计算机上安装公共语言运行库 (CLR) 的多个版本。这使 ASP.NET 应用程序可以使用它所需要的版本,而不影响其他应用程序。下面几节说明在同一台计算机上如何安装、卸载以及再发行 ASP.NET 的多个版本。

安装多个版本的 ASP.NET

若要将某一版本的 ASP.NET 添加到计算机,请针对要安装的版本运行 .NET Framework 可再发行组件包安装程序 (Dotnetfx.exe)。默认情况下,如果满足下列条件,所有现有的 ASP.NET 应用程序将在安装过程中自动重新配置,以便使用运行库的正在安装的版本:

  • 正在安装的 .NET Framework 版本高于目前映射到应用程序的版本。

  • 正在安装的 .NET Framework 版本与映射到应用程序的版本相兼容。通常情况下,版本号决定了兼容性。如果只是次修订号和内部版本号发生变化,通常就是兼容的;而主修订号发生变化是不兼容的。

    a99txfy5.alert_note(zh-cn,VS.90).gif说明:

    尽管在满足上述条件时 ASP.NET 应用程序会自动更新以使用正在安装的 ASP.NET 版本,但是,当前 Machine.config 文件中的自定义配置设置不会传输到新安装的 Machine.config 文件。如果您的应用程序使用自定义配置设置,请务必手动更新新的 Machine.config 文件,或使用 ASP.NET IIS 注册工具 (Aspnet_regiis.exe) 将应用程序重新映射到早期版本的 ASP.NET。

为防止将全部现有应用程序自动重新映射到正在安装的 .NET Framework 版本,请在运行 Dotnetfx.exe 安装程序时使用 /noaspupgrade 命令行选项。下面的命令演示该语法:

Dotnetfx.exe /c:"install /noaspupgrade"

有关 .NET Framework 可再发行组件包的更多信息,请参见再发行 .NET Framework

a99txfy5.alert_note(zh-cn,VS.90).gif说明:

如果 .NET Framework 是通过 Windows 控制面板中的“添加/删除程序”项或 Windows“配置您的服务器”向导安装的,则默认情况下,会在安全锁定控制台中启用 ASP.NET。但是,如果 .NET Framework 是通过 Microsoft Visual Studio、Windows Update 或 .NET Framework 可再发行组件包 (Dotnetfx.exe) 安装的,则 ASP.NET 默认情况下将被禁用。

卸载某一版本的 ASP.NET

如果您在一台计算机上安装了多个版本的 ASP.NET,您可以卸载某一特定版本。卸载 ASP.NET 通常采用的方法是:通过 Windows 控制面板中的**“添加/删除程序”**项卸载 .NET Framework。在卸载过程中,安装程序使用 -u 选项(卸载标志)来调用 ASP.NET IIS 注册工具 (Aspnet_regiis.exe)。

a99txfy5.alert_note(zh-cn,VS.90).gif说明:

如果只是希望卸载某一版本的 ASP.NET,而不卸载关联的 .NET Framework,则可以直接使用 Aspnet_regiis.exe。.NET Framework 的每一份安装都包含该工具的关联版本。如果只卸载 ASP.NET,请使用与要卸载的 ASP.NET 版本相关联的工具版本的 -u 选项。有关更多信息,请参见 ASP.NET IIS 注册工具 (Aspnet_regiis.exe)

Aspnet_regiis.exe 工具的 -u 选项执行以下操作:

  • 当前映射到要卸载的 ASP.NET 版本的所有 ASP.NET 应用程序将被重新映射到计算机上的最新兼容版本的 ASP.NET 上。如果不存在相兼容版本,该应用程序的脚本映射将被完全删除。

    a99txfy5.alert_caution(zh-cn,VS.90).gif警告:

    移除脚本映射会导致 IIS 提供文本形式的 ASP.NET 页。这有可能会将源代码公开给客户端。

  • 如果要卸载的 ASP.NET 版本正是当前的最新版本,则 ASP.NET 状态服务将映射到最新的兼容版本上。如果不存在兼容版本,ASP.NET 状态服务将被卸载。(ASP.NET 状态服务为 ASP.NET 的所有兼容版本所共享,并且总是映射到安装的最新版本的 ASP.NET。)

  • 要卸载的版本的性能对象及关联的性能计数器将被移除。适用于安装的所有版本的 ASP.NET 和 ASP.NET 应用程序的一般性能对象和计数器,将定向到保留在计算机上的最新安装版本。

  • 如果计算机上已不存在其他 ASP.NET 安装,ASPNET 用户帐户以及关联的访问控制列表将被移除。

有关安装多个版本的 ASP.NET 所产生的其他影响的信息,请参见 ASP.NET 并行 (Side-by-Side) 概述

.NET Framework 的第三方再发行

按照特殊的再发行许可证,第三方应用程序可以将 .NET Framework 打包,并将其作为他们的安装程序的一部分来安装。这样,应用程序就可以安装它的运行所需要的特定版本的 .NET Framework。提供 .NET Framework 可再发行组件包 (Dotnetfx.exe) 是为了让运行库与应用程序一起部署。Dotnetfx.exe 的默认安装脚本也许不适合您的应用程序的需要。如果是这样,在作为应用程序安装程序的一部分安装 .NET Framework 时,由您自己决定要使用下面描述的哪些选项。

有关 .NET Framework 可再发行组件包的更多信息,请参见再发行 .NET Framework。有关可再发行组件包的最终用户许可协议 (EULA) 的更多信息,请参见从何处获取 .NET Framework 可再发行组件包

禁用脚本映射自动更新

默认情况下,如果在已经安装 .NET Framework 的计算机上安装 .NET Framework,会自动更新所有的 ASP.NET 应用程序,以使用新版本的 .NET Framework,除非应用程序绑定到不兼容的运行库版本或更新的运行库版本。通常,只能由系统管理员执行这类安装。如果 .NET Framework 是作为应用程序安装程序的一部分安装的,它不应该强制计算机上的其他应用程序使用这一版本的运行库。

作为安装脚本的一部分,Dotnetfx.exe 通常选用 -i 选项来调用 ASP.NET IIS 注册工具 (Aspnet_regiis.exe) 以安装 ASP.NET。此选项尝试更新所有现有 ASP.NET 应用程序的脚本映射。若要防止安装过程自动更新计算机上的其他应用程序的脚本映射,请在发出 Dotnetfx.exe 命令时使用 /noaspnetupgrade 选项。该选项使得安装程序改用 Aspnet_regiis.exe 的 -ir 选项,从而跳过脚本映射的自动更新、默认文档以及 MIME 交换步骤。下面的命令演示该语法:

Dotnetfx.exe /c:"install /noaspupgrade"

手动更新脚本映射

有时需要手动设置应用程序的脚本映射。如果应用程序需要它自己的、针对正在安装的 .NET Framework 版本的虚拟目录,请确保应用程序的安装程序也采用 -s 或 -sn 选项显式调用 Aspnet_regiis.exe 来设置脚本映射。

以下演示了一个命令行示例,它更新一个名为 SampleApp1 的应用程序的脚本映射。

Aspnet_regiis.exe -s W3SVC/1/ROOT/SampleApp1

有关更多信息,请参见 ASP.NET IIS 注册工具 (Aspnet_regiis.exe)

.NET Framework 程序集统一

在并行执行中,组成一个应用程序的组件可能是使用不同版本的 .NET Framework 生成的。这会在组件的依赖项之间形成冲突。例如,假设组件 A 是使用 .NET Framework 1.1 版生成的,需要使用 1.1 版的 System.Data 程序集。组件 B 是使用 .NET Framework 1.1 版生成的,需要使用 2.0 版的 System.Data 程序集。如果程序集版本不兼容,但却同时加载,则可能会导致意外的类型不匹配或其他问题。

应用程序如何确定要使用的 .NET Framework 版本

为了允许使用同一程序集的不同版本,当应用程序使用在 .NET Framework 的不同版本上生成的组件时,与应用程序关联的版本决定了应用程序及其所有组件使用的 .NET Framework 程序集的版本。在上例中,如果应用程序映射到 .NET Framework 2.0 版,就会加载 2.0 版的 System.Data 程序集,并在应用程序使用的所有组件之间共享该程序集版本。组件 A 对 1.1 版 System.Data 程序集的引用在运行时被提升为引用 2.0 版。

如果您获得了特定程序集的更新版本,则无论应用程序映射到哪一版本的 .NET Framework,都可以将应用程序与该程序集关联。为此,可以向 Machine.config 或 Web.config 文件添加 <bindingRedirect> 元素。这些元素将应用程序与替换某些类型的应用程序的现有程序集的更新程序集关联。例如,如果将来发布支持 SOAP 1.2 版的 System.Web.Service.dll 更新版本,您可能希望应用程序使用这一版本而非最初与 .NET Framework 一同安装的版本。

这一行为也可以在 ASP.NET 主机配置文件 (Aspnet.config) 中重写。ASP.NET 使用此文件来确保:System.Web.dll 和 System.Web.RegularExpressions.dll 的版本始终与应用程序的关联版本匹配,而不考虑 Web.config 文件中指定的重写。

有时候,您可能希望在使用较早版本的 ASP.NET 生成的应用程序中,使用由更新版本的 ASP.NET 生成的组件。应用程序所使用的运行库版本总是由与应用程序关联的 ASPNET ISAPI 版本决定。如果应用程序被配置为使用 .NET Framework 的早期版本,则组件在运行时会自动重定向以便也使用该版本。

如果在使用较早版本的 .NET Framework 生成的应用程序中,使用由更高版本的 .NET Framework 生成的组件,请考虑以下问题:

  • 确保该组件不使用特定于该更高版本 .NET Framework 的任何功能,也不依赖特定于该更高版本的任何行为。这些功能在较早版本的运行库中可能不可用。

  • ASP.NET 通过使用 IIS 中的脚本映射将应用程序绑定到某一运行库版本。<supportedRuntime><requiredRuntime> 配置元素不适用于 ASP.NET 应用程序。

或者,如果在计算机上安装了生成组件时所使用的运行库版本,您也可以对应用程序重新进行配置,以使用更新的运行库版本。由于更高版本的 .NET Framework 一般具有向后兼容性,因此大多数应用程序功能都无需过多修改就可以正常工作。不过,仍然需要认真测试以确保在 .NET Framework 的新版本上运行应用程序不会导致应用程序出错。

返回页首

代码示例

帮助和演练主题

返回页首

类参考

返回页首

其他资源

返回页首

新增功能

返回页首

请参见

参考

返回页首

其他资源

并行 (Side-by-Side) 执行