IIS6 アプリケーション プールの問題は、IIS7 とは異なり、どのバージョンの .NET Framework がロードされているかを認識できないことです。
IIS6 Web サイトは、サイトまたはサブ アプリケーションのスクリプト マップが指す ASP.NET のバージョンによって、プールに読み込まれる .NET Framework ランタイムを決定します。ワーカー プロセスは、拡張子 (またはワイルドカード マッピングで定義されているもの) にマップされている必要な ISAPI DLL を盲目的にロードします。
この古い方法は、多くの場合、同じプールに割り当てられた 2 つの異なるサイトが異なるバージョンの ASP.NET を実行するように構成され、悪名高い:

...そして、次のイベントが Windows アプリケーション ログに記録されます。
イベントの種類: エラー
イベント ソース: ASP.NET 2.0.50727.0
イベント カテゴリ: なし
イベント ID: 1062
日付: 2011 年 12 月 1 日
時間: 12:31:43
ユーザー: なし
コンピューター: KK-DEBUG
説明:
2 つの異なるバージョンの ASP.NET を同じ環境で実行することはできません。
IIS プロセス。IIS 管理ツールを使用して再構成してください。
サーバーを使用して、アプリケーションを別のプロセスで実行します。
アプリケーション プールが実行するように構成されている .NET バージョンを特定する唯一の方法は、そのプールが割り当てられているすべてのサイトを調べて、未加工のスクリプト マップを確認することです。
これに関する唯一の問題は、(たとえば) なんらかの理由で、別のバージョンの ASP.NET を使用するようにセットアップされている、使用されなくなったサイト (またはサブアプリケーション) が誤って構成されている場合です。
サイト .NET バージョン アプリケーション プール
================================================== ==========
WebSite1 ASP.NET 4.0 AppPool1
WebSite2 (使用されなくなりました) ASP.NET 2.0 AppPool1
この場合、フレームワークのバージョンを決定するために優先するサイトを決定する必要があります。
この PowerShell スクリプトは、各プールで使用されている ASP.NET のバージョンを確認するのに役立つ場合があります。
# Walk sites
$allsites = ([adsi]"IIS://Localhost/W3SVC").children | where { $_.SchemaClassName -eq "IIsWebServer" }
$pools = @()
foreach($site in $allsites)
{
$path = "IIS://Localhost/W3SVC/" + $site.Name + "/root"
$siteRoot = [adsi]$path
$sitePool = $siteRoot.AppPoolId
$aspx = $siteRoot.ScriptMaps | where { $_.StartsWith(".aspx") }
if( $aspx.Contains("v1.1")) {
$runtime = "1.1"
} elseif ($aspx.Contains("v2.0")) {
$runtime = "2.0"
} elseif( $aspx.Contains("v4.0")) {
$runtime = "4.0"
} else {
$runtime = "Unknown"
}
$v = @{AppPool = $siteRoot.AppPoolId; RunTime = $runtime; SiteId = $site.Name}
$pools += $v
}
$pools | Sort-Object { $_.AppPool } | % { Write-Host $_.AppPool $_.SiteId $_.RunTime }
ルート レベルでサイトをウォークするだけで、サブ アプリケーションを識別するために各サイトを再帰的にウォークすることはありません。