- PR -

Ver1.0のクラスライブラリとVer1.1のEXE

投稿者投稿内容
zucci
会議室デビュー日: 2003/03/25
投稿数: 12
投稿日時: 2003-08-19 10:53
VS.NET2003になって、Windowsフォームアプリを作成しています。
VS.NET2002の時に作成したクラスライブラリを使用するんですが、
このクラスライブラリってVS.NETで再ビルドした方がいいのでしょうか?

再ビルドしなかったときは、EXEはframework1.1上で動作して、
クラスライブラの処理は,Framework1.0上で動作するんでしょうか?




小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2003-08-19 12:41
再ビルドしたほうがいいと思います。

再ビルドしない場合、EXEがv1.1で動作をはじめたら、その中で利用される
クラスライブラリもv1.1のCLR上で動きます。
以前試してみたとき、そういう結果がでました。

#アプリケーションドメインは1つなので、当然といえば当然。
zucci
会議室デビュー日: 2003/03/25
投稿数: 12
投稿日時: 2003-08-19 13:38
小野様ありがとうございます。

了解しました。

再ビルドしないと、今後下位バージョンのCLRが標準搭載されないOSとか出たり、
上位互換の無いメンバを使用したりした時は、不具合が出てしまう事があり得ると
いうことも考慮しばくてはならないということですね。自作のクラスライブラリを
提供するなら、CLRのバージョン毎に配布となってしまうかもしれないのですね。



へるまろ
ベテラン
会議室デビュー日: 2003/02/04
投稿数: 57
お住まい・勤務地: 東京
投稿日時: 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で動作

という挙動が起こるということでしょうか?
申し訳ありませんが、宜しくお願いします
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2003-08-19 18:14
引用:

どっとねった〜さんの書き込み (2003-08-19 14:10) より:

ずーさんが、書き込まれた条件
EXE -> v1.1で開発
DLL -> v1.0で開発
があったとして、この両アセンブリを
v1.0とv1.1の両方のFrameworkが入った端末で
動かした場合



EXEがVS.NET2003で作成されているのであれば、必ず
 EXE -> v1.1で動作
 DLL -> v1.1で動作
となります。

#設定ファイルでV1.0上で動作するように記述した場合は除きます。

EXEファイルとDLLファイルは同一のCLR上で動作するので
そのレベルでバージョンが異なる、ということは有り得ません。

へるまろ
ベテラン
会議室デビュー日: 2003/02/04
投稿数: 57
お住まい・勤務地: 東京
投稿日時: 2003-08-19 19:15
小野@EACさん、便乗質問であるにも関わらず
レスを返して頂きありがとうございます。

引用:

EXEがVS.NET2003で作成されているのであれば、必ず
 EXE -> v1.1で動作
 DLL -> v1.1で動作
となります。

#設定ファイルでV1.0上で動作するように記述した場合は除きます。

EXEファイルとDLLファイルは同一のCLR上で動作するので
そのレベルでバージョンが異なる、ということは有り得ません。



どうも私の中でサイドバイサイドとCLRの動作時のバージョンとを
誤解していました。

ではこの場合ですと、
EXE -> .NET Framework v1.1を参照
DLL -> .NET Framework v1.0を参照

EXE -> CLR v1.1上で動作
DLL -> CLR v1.1上で動作

という挙動でよろしいでしょうか?
(設定ファイルの変更等はなしの条件下)

まだ誤解があるかもしれませんが、
この辺りをしっかりと押さえておかないと後々
泣きを見そうな気がするもので・・

宜しくお願いいたします。


小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2003-08-19 19:22
引用:

どっとねった〜さんの書き込み (2003-08-19 19:15) より:
ではこの場合ですと、
EXE -> .NET Framework v1.1を参照
DLL -> .NET Framework v1.0を参照

EXE -> CLR v1.1上で動作
DLL -> CLR v1.1上で動作
という挙動でよろしいでしょうか?


えっと、ここで「参照」ってどういう意味で使ってますか?

動作時にCLR V1.1上で動作している、ということは、
その時点ではDLLはV1.1上のクラスライブラリを見に
いっています。
そういう意味でバージョンの不整合が起き、正常に
動作しないことも有り得ますので、再コンパイルして
動作確認をとったほうがいいでしょう、という話になります。
へるまろ
ベテラン
会議室デビュー日: 2003/02/04
投稿数: 57
お住まい・勤務地: 東京
投稿日時: 2003-08-19 22:04
紛らわしい書き方をしてしまい申し訳ありません。

私なりに色々と調べてみたのですが、どうやら
「CLRは複数のバージョンをインストールし、同時に
 実行することが可能」
というのを誤解していました。

同一プロセスにロードされるDLLは複数のバージョンを
同時にロードすることが可能であるが(サイドバイサイド)
CLRは複数のバージョンが存在していても、特定のプロセス
で実行するバージョンは一つである。

同一端末内にEXE1とEXE2があったとして
EXE1 -> VS.NET2002で開発
EXE2 -> VS.NET2003で開発

という条件であった場合、

EXE1 -> v1.0で動作
EXE2 -> v1.1で動作

ということだと理解しましたが、正しいでしょうか?


スキルアップ/キャリアアップ(JOB@IT)