ASP.NET 並存功能概觀

更新:2007 年 11 月

.NET Framework 可以讓您在同一部電腦上安裝多個版本的 Common Language Runtime。根據預設,當 .NET Framework 安裝在已安裝執行階段的電腦上時,所有 ASP.NET 應用程式都會自動更新為使用該版本的 .NET Framework。雖然較新版的 .NET Framework 都已設計成可以回溯相容,但是您可能會想設定 ASP.NET 應用程式使用特定的執行階段版本。

這個主題包含:

  • 案例

  • <your technology here> 功能

  • 背景

  • 程式碼範例

  • 類別參考

  • 其他資源

  • 新功能

案例

回到頁首

功能

回到頁首

背景

更新電腦中的元件或應用程式時,傳統的方式是將舊的版本移除再以新版本取代。如果新版本與舊版本不相容,這種方式通常會破壞使用該元件或應用程式的其他應用程式。.NET Framework 提供並存執行的支援,可允許您同時將組件 (Assembly) 或應用程式的多個版本安裝在同一台電腦上。由於可以同步安裝多個版本,因此 Managed 應用程式可以選取所要使用的版本,而不會影響到使用不同版本的其他應用程式。

在 ASP.NET 中,將應用程式安裝在同一部電腦時,它們就可以並存執行,但是會使用不同版本的 .NET Framework。下列主題說明 ASP.NET 中的並存支援,以及如何設定 ASP.NET 應用程式以達並存執行的目的。

.NET Framework 可以讓您在同一部電腦上安裝多個版本的 Common Language Runtime。根據預設,當 .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 擴充程式,會在網際網路資訊服務 (IIS) 中為應用程式註冊一個指令碼對應 (有時是指應用程式對應)。

指令碼對應會使副檔名 (如 .aspx) 和 HTTP 動作 (如 GET 和 POST) 與適當的 ISAPI 擴充程式產生關聯。例如,當 IIS 收到 .aspx 檔的要求時,應用程式的指令碼對應會指引 IIS,將 aspx 檔案轉送到適當的 ASP.NET ISAPI 擴充程式版本。每一個 ASP.NET 應用程式的指令碼對應通常是在 [網際網路資訊服務] 管理主控台中設定,而且可以直接套用到應用程式,或者是繼承自父應用程式。根據預設,安裝了 .NET Framework 時,除非應用程式使用較新的版本或不相容的版本,否則所有現有 ASP.NET 應用程式的指令碼對應都會自動更新為使用新的 ASP.NET ISAPI 擴充程式。

為了簡化為 ASP.NET 應用程式重新設定指令碼對應的程序,.NET Framework 的每一個安裝版本都有自己的 ASP.NET IIS 註冊工具 (Aspnet_regiis.exe) 版本。根據預設,這個工具會安裝在下列目錄中:

%system root%\Microsoft.NET\Framework\versionNumber

您可以使用這個工具,將 ASP.NET 應用程式對應至符合工具的 ASP.NET ISAPI 擴充程式版本。

注意事項:

由於 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)。如需更新 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 狀態服務可以用來管理電腦上的工作階段 (Session) 狀態。安裝在同一部電腦上的所有 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 可以讓您在同一台電腦上安裝多個版本的 Common Language Runtime (CLR)。這讓 ASP.NET 應用程式可以使用它需要的版本執行,而不會影響到其他應用程式。下列章節說明如何在同一部電腦上安裝、解除安裝及轉散發 ASP.NET 的多個版本。

安裝 ASP.NET 的多個版本

若要將 ASP.NET 的某個版本加入電腦,請執行欲安裝版本的 .NET Framework 可轉散發套件安裝程式 (Dotnetfx.exe)。當符合下列條件時,依預設,所有現有的 ASP.NET 應用程式都會在安裝期間自動重新設定,以使用執行階段的安裝版本:

  • 安裝的 .NET Framework 版本比目前對應至應用程式的版本還新。

  • 安裝的 .NET Framework 版本與對應至應用程式的版本相容。一般來說,版本號碼可決定相容性。次要修訂編號和組建編號的變更通常可以相容,而主要修訂編號則否。

    注意事項:

    雖然在符合前述條件時,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

注意事項:

透過 [Windows 控制台] 的 [新增或移除程式] 項目或 Windows [設定您的伺服器] 精靈安裝 .NET Framework 時,預設會在安全性鎖定主控台中啟用 ASP.NET。但是,如果透過 Microsoft Visual Studio、Windows Update 或 .NET Framework 可轉散發套件 (Dotnetfx.exe) 安裝 .NET Framework,則預設會停用 ASP.NET。

解除安裝 ASP.NET 其中一個版本

如果您在電腦上安裝了多個版本的 ASP.NET,則可以解除安裝特定的版本。ASP.NET 的解除安裝通常是藉由解除安裝 .NET Framework (透過 [Windows 控制台] 的 [新增或移除程式] 項目) 來完成。在解除安裝處理序 (Process) 期間,安裝程式會使用 -u 選項 (解除安裝旗標) 呼叫 ASP.NET IIS 註冊工具 (Aspnet_regiis.exe)。

注意事項:

如果您只想解除安裝某一版 ASP.NET,但不想解除安裝相關聯的 .NET Framework,可以直接使用 Aspnet_regiis.exe。.NET Framework 的每一個安裝版本都含有這個工具的關聯版本。如果只要解除安裝 ASP.NET,請使用這個工具的 -u 選項,工具的版本必須與您要解除安裝的 ASP.NET 版本相關聯。如需詳細資訊,請參閱ASP.NET IIS 註冊工具 (Aspnet_regiis.exe)

Aspnet_regiis.exe 工具的 -u 選項會執行下列動作:

  • 目前對應至正在解除安裝之 ASP.NET 版本的所有 ASP.NET 應用程式,都會重新對應至電腦上最新相容的 ASP.NET 版本。如果沒有相容版本存在,則會完全除移應用程式的指令碼對應。

    警告:

    移除指令碼對應會使 IIS 以常值文字處理 ASP.NET 網頁。而可能將原始程式碼公開 (Expose) 給用戶端。

  • 如果您正在解除安裝的 ASP.NET 版本是目前最新的版本,ASP.NET 狀態服務就會對應至最新相容的版本。如果沒有相容的版本,則會解除安裝 ASP.NET 狀態服務(可跨所有 ASP.NET 相容版本共用的 ASP.NET 狀態服務,一定會對應至最新安裝的 ASP.NET 版本)。

  • 正在解除安裝之版本的效能物件和相關聯的效能計數器都會移除。適用於 ASP.NET 所有已安裝版本和 ASP.NET 應用程式的泛型效能物件和計數器,都會導向至電腦上保留的最新安裝版本。

  • 如果電腦上沒有安裝其他 ASP.NET,就會移除 ASPNET 使用者帳戶和相關聯的存取控制清單。

如需安裝多個 ASP.NET 版本的其他作用,請參閱 ASP.NET 並存功能概觀

.NET Framework 協力廠商轉散發

協力廠商應用程式可以在特殊轉散發授權規範下,封裝及安裝 .NET Framework,做為其安裝的一部分。這樣可讓應用程式安裝執行所需之 .NET Framework 的特定版本。我們提供了 .NET Framework 可轉散發套件 (Dotnetfx.exe) 供應用程式使用執行階段來部署。Dotnetfx.exe 的預設安裝指令碼可能無法符合您應用程式的需求。如果是這樣,您可以選擇是否要使用以下所述的選項,將 .NET Framework 當做應用程式安裝的一部分進行安裝。

如需 .NET Framework 可轉散發套件的詳細資訊,請參閱轉散發 .NET Framework。如需可轉散發套件之使用者授權合約 (EULA) 的詳細資訊,請參閱何處可以取得 .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 到 System.Data 組件 1.1 版的參考也會在執行階段時升級成參考 2.0 版。

如果您取得特定組件的更新版,則無論應用程式對應的 .NET Framework 版本為何,您都可以將應用程式與組件加以關聯。若要這樣做,請將 <bindingRedirect> 項目加入 Machine.config 或 Web.config 檔。這些項目會使應用程式與更新的組件產生關聯,以取代某些應用程式類型的現有組件。例如,如果將來發行了可以支援 SOAP 1.2 版的 System.Web.Service.dll 更新版本,您可能會想讓應用程式使用該版本,取代 .NET Framework 原本安裝的版本。

您也可以在 ASP.NET 主機組態檔 (Aspnet.config) 中覆寫這個行為。不論 Web.config 檔中是否指定任何覆寫,ASP.NET 會使用這個檔案確保 System.Web.dll 和 System.Web.RegularExpressions.dll 的版本,永遠符合與應用程式關聯的版本。

有時您可能想在以舊版建置的應用程式中使用以較新版 ASP.NET 建置的元件。與應用程式關聯的 ASPNET ISAPI 版本,會決定應用程式使用的執行階段版本。如果應用程式設定為使用舊版的 .NET Framework,同樣地,在執行階段也會將元件自動重新導向成使用該版本。

在以舊版建置的應用程式中使用以舊版 .NET Framework 建置的元件時,請考慮下列事項:

  • 請確定元件不致於過份使用或依賴新版 .NET Framework 中特有的功能或行為。這些功能有時會導致舊版的執行階段發生問題。

  • ASP.NET 使用 IIS 中的指令碼對應,將應用程式建置於執行階段版本中。<supportedRuntime><requiredRuntime> 組態項目不適用於 ASP.NET 應用程式。

另外,如果用來建置元件的執行階段版本安裝在電腦上,您也可以將應用程式重新設定成使用較新的執行階段版本。一般來說,由於較新版的 .NET Framework 都具有回溯相容性功能,因此不需大幅修改就可以使用大部分應用程式功能。然而,您應該小心測試,以確認在新版 .NET Framework 中執行應用程式並不會產生應用程式錯誤。

回到頁首

程式碼範例

使用說明和逐步解說主題

回到頁首

類別參考

回到頁首

其他資源

回到頁首

新功能

回到頁首

請參閱

參考

回到頁首

其他資源

並存執行