- PR -

DLL配信

投稿者投稿内容
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-09-02 13:07
引用:

ヨコヤマダさんの書き込み (2004-09-02 11:54) より:
実験してみたところ偶然以下のような発見がありました。
・定数しか用意していない(メソッドが一切ない)「独自ライブラリ」を用意し「公開DLL」からその定数を使用している場合、「独自ライブラリ」の変更が反映されません。

アプリケーションドメインがリスタートされない条件として、前者のような条件があるということなのでしょうか??


読んで分かりました。
まず、原因は「アプリケーションドメインがリスタートされないこと」ではありません。アプリケーションドメインは、(きっと)リスタートされているはずです。

定数というのは、Constということですよね。
.NET Frameworkでは、定数の参照はコンパイル時に解決され、コードレベルで即値に置き換えられます。つまり、参照している先(定数を定義している側)のDLLで定義を変更しても、既にその定数を使用しているDLLには反映されません。
※反映させるには、定数を使用している側のDLLも再コンパイルする必要があります。
ヨコヤマダ
会議室デビュー日: 2003/10/14
投稿数: 8
投稿日時: 2004-09-02 14:43
todoさん、なちゃさん、ご返答ありがとうございます。

>todoさん
私もキャッシュされているに違いない!と思っていました。
サーバ上の全ての定数DLLファイルを削除したのにもかかわらず動いてしまうもんだから、それしかない、と・・・

>なちゃさん
そうなんですかー!
大変よく理解できました!
ありがとうございす!

でもそうすると、定数クラスはコンパイルさえ終わってしまえば、DLLは配置する必要がない、ということになりますね。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-09-02 17:44
引用:

ヨコヤマダさんの書き込み (2004-09-02 14:43) より:

サーバ上の全ての定数DLLファイルを削除したのにもかかわらず動いてしまうもんだから、それしかない、と・・・
--
でもそうすると、定数クラスはコンパイルさえ終わってしまえば、DLLは配置する必要がない、ということになりますね。


サーバ上の全ての定数DLLを削除しても動いてしまうということから、まさにそういうことでしょうね。
# 私は試したことはないですが、多分動いてしまいそうです。

後で定義を変えてしまう可能性のある定数などでは、Constの代わりに、static readonly(Shared ReadOnly)なフィールドを使う方が良いと思います。
こちらは単に最初に一度だけ初期化できるというだけで通常のフィールドですから、定義側のDLLを更新するだけできちんと反映されます。
Constの方は、まず変わることのない本当の定数として使う場合に限定した方が無難だと思います。

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