ASP.NET のバージョン切り替え

複数の ASP.NET のインストール〜設定変更まで簡単に。

.NET Framework のインストール

あたりまえのことだけど、ASP.NET に対応した .NET Framework をインストールする。
すでに ASP.NET で Web Application や Web Service が稼動している場合、その環境を破壊しないために、

Dotnetfx.exe /c:"install /noaspupgrade"

と、/noaspupgrade オプションを指定すること。

クライアント向けコンテンツのインストール

各バージョンの ASP.NET 用のクライアントコンテンツをインストールする。これがなくてもある程度は動作するのだが、Validator やら Postback やらが動作しなくなるので、必須といえるだろう。

aspnet_regiis.exe -c

インストールしたすべての .NET Framework のディレクトリに aspnet_regiis.exe が存在するので、個別に1つづつ実行すること。デフォルトでは aspnet_regiis.exe は Windows ディレクトリの下の Micoroft.NET/Framework/VERSION/ に配置されている。
クライアントコンテンツのデフォルトのインストール先は、

/inetpub/wwwroot/aspnet_client/system_web/VERSION/

になっていて、独自の WebControls を作成した時に、たとえば、

/inetpub/wwwroot/aspnet_client/NAMESPACE/VERSION/

みたいなフォルダを作ってクライアント向けコンテンツを管理することができる。このあたりの使い方は http://www.asp.net/コンポーネント群をダウンロードしてみて比較してみると、あまり安定していないようだ。
インストールされている ASP.NET のバージョンは、

aspnet_regiis.exe -lv

      • -

1.1.4322.0 Valid C:\WINNT\Microsoft.NET\Framework\v1.1.4322\aspne
t_isapi.dll
2.0.50727.0 Valid (Root) C:\WINNT\Microsoft.NET\Framework\v2.0.50727\aspn
et_isapi.dll

のように表示することができる。クライアントコンテンツのアンインストールには、

aspnet_regiis.exe -e
aspnet_regiis.exe -ea

を実行する。-e は aspnet_regiis.exe 自身がインストールしたコンテンツのみをアンインストールするのみだが、-ea は認識可能なすべてのバージョンのクライアントコンテンツをアンインストールする。

ASP.NETスクリプトマッピングを設定する

仮想ディレクトリに ASP.NET の設定を行う。1つづつ設定すると物凄い量の設定があるのだが、これも aspnet_regiis.exe を利用して

aspnet_regiis.exe -s path/to/virtual/directory
aspnet_regiis.exe -sn path/to/virtual/directory

ex)
  v1.1.4322\aspnet_regiis.exe -s W3SVC/1/Root/asp11
  v2.0.50727\aspnet_regiis.exe -s W3SVC/1/Root/asp20

とするだけである。ちなみに W3SVC/1/Root というのは標準でセットアップされた最初の IIS の WWW Service インスタンスを示す rootpath で、標準だと W3SVC/1/Root/asp11 は http://localhost/asp11/ を意味することになる。
1つの仮想ディレクトリで運用できる ASP.NET ランタイムは1つだけなので、利用したい ASP.NET の aspnet_regiis.exe を1回だけ使用する。

マッピングの現在設定は、

aspnet_regiis.exe -lk

      • -

W3SVC/ 2.0.50727.0
W3SVC/1/Root/asp11/ 1.1.4322.2032
W3SVC/1/Root/asp20/ 2.0.50727.0

のように表示することができる。*1アンインストールには、

aspnet_regiis.exe -k path/to/virtual/directory
aspnet_regiis.exe -kn path/to/virtual/directory

を使用する。

Root に対して ASP.NET を設定する

aspnet_regiis.exe -i
aspnet_regiis.exe -ir
aspnet_regiis.exe -r
aspnet_regiis.exe -u
aspnet_regiis.exe -ua

この3つのコマンドは、環境が完全に壊れてしまったと思われるときに最後の手段として利用してみるとよいかもしれない。その場合は、まず -ir を利用して ASP.NET のみを再登録し、-s や -sn によってスクリプトマップを更新してみるのが良いだろう。-i や -u を使うのは最後の手段だ。

*1:実際は root の設定を継承しているため /asp20/ の行は表示されない。

*2:つまり、-i を実行すると -ir と -r が実行される……ちょっとわかりにくい?