トップ回答者
IISの.NETframework Version設定について

質問
-
お世話になっております。
標題の件について何か情報をお持ちの方がいればご教授下さい。
IISの.NETframework Version設定を4.0としたアプリケーションプール内で
異なる.NETframework Versionで作成したモジュール(dll)を動作させた場合、
各モジュールはどのVersionで実行・動作するのでしょうか?
個人的には以下のようになると思っています。
・.NETframework2.0で作成したモジュール(DLL) = 2.0で動作
・.NETframework3.0で作成したモジュール(DLL) = 3.0で動作
・.NETframework4.0で作成したモジュール(DLL) = 4.0で動作
IISの.NETframework4.0のアプリケーションプール内で
各.NETframework Versionでモジュールが動作しているイメージです。
(下位互換により動作している?)
※何か参考になるMSDNサイトがあれば教えて頂きたいです。
※その他に判断や回答に必要な情報があれば、追記致します。
2012年2月22日 2:32
回答
-
おおよそ互換そのものはあります。
しかし例えば、バージョンが上がるにつれスレッド処理が改善されています。従来、並列実行されなかったものが4.0では並列実行されるものもあります。その際、古いコードで並列実行に対する同期処理がなされていない・甘いなどの問題があると、4.0で顕在化することがあり得ます。こういった場合、4.0でのみエラーになるわけですが、4.0の非互換と言いますか? 単に元からあったコードのバグと言うべきでしょう。
そういった部分が多数あるので「互換があるから必ず動く」とは言えません。
- 回答としてマーク .NET初心者というより全て初心者 2012年6月7日 8:06
2012年2月29日 2:01
すべての返信
-
2012年2月23日 0:49
-
Keiichi Oumi様、佐祐理様返信ありがとうございます。
自分の予想とは違っていたので、驚いています。
追加で質問させて頂きたいのですが、
①ターゲット フレームワークを指定した場合でも
アプリケーションプールで指定したバージョンで動作するのでしょうか?
(コンパイルversionの指定なので関係ないと思いますが・・・。)
IISの.NETframework Version設定:4.0
モジュールの設定 :<TargetFrameworkVersion>v3.0</TargetFrameworkVersion>
動作するversion :??
※MSBuild のマルチ ターゲット
http://msdn.microsoft.com/ja-jp/library/ee395432.aspx②IISの.NETframework Version設定を4.0としたアプリケーションプールで
Version3.5のモジュールを動作させた際のエラーはVersion非互換エラーの認識で良いのでしょうか?
※前提として、IISの.NETframework Version設定を3.5としたアプリケーションプールでの動作時にエラーは無し。
- 編集済み .NET初心者というより全て初心者 2012年2月23日 2:04
2012年2月23日 2:04 -
コンパイルの話になってきたので、ASP.NETからいったん離れた説明をします。
.NET Frameworkではコンパイル時に参照するライタイムバージョンと実行時に利用するランタイムバージョンを別のものにすることができます。もちろん通常は一致させますが。コンパイル時に指定するバージョンについては質問者さんの挙げられた設定などになります。実行時に利用するランタイムバージョンはapp.configの<supportedRuntime> 要素で指定します。
こういった背景がありますから、ASP.NETにおいては、コンパイルに使用したランタイムバージョンに依らずにアプリケーションプールの動作バージョンで決まるわけです。さきほど引用しそびれましたが、Keiichi Oumiさんの挙げられたリンク先には
Web アプリケーションが実行される CLR のバージョンは、アプリケーション プール (または IIS 6.0 のスクリプトマップ) によって決定されます。 構成ファイルの supportedRuntime 要素と requiredRuntime 要素は、ASP.NET アプリケーションには適用されません。
という記述があるのはこの意味です。
さて、エラーについてはエラーの内容を見てみないことにはわかりません。
2012年2月23日 2:19 -
こんにちは
さて、エラーについてはエラーの内容を見てみないことにはわかりません。
を踏まえて…
たしかにエラーの内容によると思いますが、IISの.NETframework Version設定を3.5(2.0)から4.0に変更するのみでエラーが出るのならばVersion非互換と思うのですが、
非互換と思います。(ちなみに、Application Pool は、2.0 or 4.0のみ選択可能です。)
このような場合でも非互換ではないエラーというのは出るものなのでしょうか?
非互換によるエラーではないとすれば、開発したアプリケーションのバグとなるでしょうか…
実際にWeb.configの定義エラー(継承関係)やログ関連のエラーが出ていた記憶があります。。。
構成ファイルのスキーマが変わったことによる非互換に起因するエラーですね。
質問の意図が不明瞭になっていると思います.もう少し具体的に何を心配されているのか、明らかになりませんか?
以下参考までに。
方法: 同じサーバーで異なるバージョンの .NET Framework を使用する Web アプリケーションをホストする http://msdn.microsoft.com/ja-jp/library/dd329554.aspx
ASP.NET 4 Breaking Changes http://www.asp.net/whitepapers/aspnet4/breaking-changes- 編集済み Keiichi Oumi 2012年2月28日 1:17 綴り訂正
2012年2月28日 1:17 -
Keiichi Oumi様、返信ありがとうございます。
質問させて頂いた経緯としては、
「複数のVersionで作成・ビルドされたDLL(VB.NET)は、IIS上ではどのVersionで動作しているのか?」を、
仕事の依頼元の人から聞かれた際に明確な回答な出せなかったので、調査がてらここで質問させて頂きました。
心配している点としては、4.0より古いVesionで作成・ビルドされたDLLを4.0の(IIS)アプリケーションプールで
動作させた際にVersion非互換等の不具合が出るのか?もしくは、下位互換があるので問題なく動くのか?かを
心配しています。
加えて、IISを利用しない環境で複数のVersionで作成・ビルドされたDLL(VB.NET)を動作させた場合の
動作Versionについても調査しています。(例えば、WindowsサービスでDLLを動作させている環境など)
紹介して頂いたサイト参照させて頂きます!
2012年2月29日 0:24 -
おおよそ互換そのものはあります。
しかし例えば、バージョンが上がるにつれスレッド処理が改善されています。従来、並列実行されなかったものが4.0では並列実行されるものもあります。その際、古いコードで並列実行に対する同期処理がなされていない・甘いなどの問題があると、4.0で顕在化することがあり得ます。こういった場合、4.0でのみエラーになるわけですが、4.0の非互換と言いますか? 単に元からあったコードのバグと言うべきでしょう。
そういった部分が多数あるので「互換があるから必ず動く」とは言えません。
- 回答としてマーク .NET初心者というより全て初心者 2012年6月7日 8:06
2012年2月29日 2:01 -
そういった部分が多数あるので「互換があるから必ず動く」とは言えません。
そうなんですよねー(><)
あと、蛇足になるかもしれませんが。(っていうか蛇足?)
.NET Frameworkのバージョンを変更するとすれば、IIS,AppPool のバージョンの組み合わせによって、リクエストの制限方法も変わってくるので注意が必要な場合があります。
.NET Framework Version IIS Version Server OS 2.0 IIS 7.0 Windows Server 2008 3.5 SP1 以上 IIS 7.0 Windows Server 2008 IIS 7.5 Windows Server 2008 R2 といった組み合わせごとに、要求数を制限する方法が異なります。詳しくは、以下をどうぞ。
ASP.NET Thread Usage on IIS 7.5, IIS 7.0, and IIS 6.0
IIS 7 での ASP.NET 2.0 の互換性に影響する変更点
<configuration> 要素2012年3月2日 1:03