- - PR -
Ver1.0のクラスライブラリとVer1.1のEXE
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-08-19 10:53
VS.NET2003になって、Windowsフォームアプリを作成しています。
VS.NET2002の時に作成したクラスライブラリを使用するんですが、 このクラスライブラリってVS.NETで再ビルドした方がいいのでしょうか? 再ビルドしなかったときは、EXEはframework1.1上で動作して、 クラスライブラの処理は,Framework1.0上で動作するんでしょうか? | ||||
|
投稿日時: 2003-08-19 12:41
再ビルドしたほうがいいと思います。
再ビルドしない場合、EXEがv1.1で動作をはじめたら、その中で利用される クラスライブラリもv1.1のCLR上で動きます。 以前試してみたとき、そういう結果がでました。 #アプリケーションドメインは1つなので、当然といえば当然。 | ||||
|
投稿日時: 2003-08-19 13:38
小野様ありがとうございます。
了解しました。 再ビルドしないと、今後下位バージョンのCLRが標準搭載されないOSとか出たり、 上位互換の無いメンバを使用したりした時は、不具合が出てしまう事があり得ると いうことも考慮しばくてはならないということですね。自作のクラスライブラリを 提供するなら、CLRのバージョン毎に配布となってしまうかもしれないのですね。 | ||||
|
投稿日時: 2003-08-19 14:10
横から申し訳ありません。
今後ことを考えて便乗で確認させて頂きたい のですが、 ずーさんが、書き込まれた条件 EXE -> v1.1で開発 DLL -> v1.0で開発 があったとして、この両アセンブリを v1.0とv1.1の両方のFrameworkが入った端末で 動かした場合 ・DLLをVS.NET2003でリビルドした時 EXE -> v1.1で動作 DLL -> v1.0で動作 ・DLL1をVS.NET2003でリビルドしなかった時 EXE -> v1.1で動作 DLL -> v1.1で動作 という挙動が起こるということでしょうか? 申し訳ありませんが、宜しくお願いします | ||||
|
投稿日時: 2003-08-19 18:14
EXEがVS.NET2003で作成されているのであれば、必ず EXE -> v1.1で動作 DLL -> v1.1で動作 となります。 #設定ファイルでV1.0上で動作するように記述した場合は除きます。 EXEファイルとDLLファイルは同一のCLR上で動作するので そのレベルでバージョンが異なる、ということは有り得ません。 | ||||
|
投稿日時: 2003-08-19 19:15
小野@EACさん、便乗質問であるにも関わらず
レスを返して頂きありがとうございます。
どうも私の中でサイドバイサイドとCLRの動作時のバージョンとを 誤解していました。 ではこの場合ですと、 EXE -> .NET Framework v1.1を参照 DLL -> .NET Framework v1.0を参照 EXE -> CLR v1.1上で動作 DLL -> CLR v1.1上で動作 という挙動でよろしいでしょうか? (設定ファイルの変更等はなしの条件下) まだ誤解があるかもしれませんが、 この辺りをしっかりと押さえておかないと後々 泣きを見そうな気がするもので・・ 宜しくお願いいたします。 | ||||
|
投稿日時: 2003-08-19 19:22
えっと、ここで「参照」ってどういう意味で使ってますか? 動作時にCLR V1.1上で動作している、ということは、 その時点ではDLLはV1.1上のクラスライブラリを見に いっています。 そういう意味でバージョンの不整合が起き、正常に 動作しないことも有り得ますので、再コンパイルして 動作確認をとったほうがいいでしょう、という話になります。 | ||||
|
投稿日時: 2003-08-19 22:04
紛らわしい書き方をしてしまい申し訳ありません。
私なりに色々と調べてみたのですが、どうやら 「CLRは複数のバージョンをインストールし、同時に 実行することが可能」 というのを誤解していました。 同一プロセスにロードされるDLLは複数のバージョンを 同時にロードすることが可能であるが(サイドバイサイド) CLRは複数のバージョンが存在していても、特定のプロセス で実行するバージョンは一つである。 同一端末内にEXE1とEXE2があったとして EXE1 -> VS.NET2002で開発 EXE2 -> VS.NET2003で開発 という条件であった場合、 EXE1 -> v1.0で動作 EXE2 -> v1.1で動作 ということだと理解しましたが、正しいでしょうか? |