プロが教える店舗&オフィスのセキュリティ対策術

VisualStudio2008で開発をしています。

共通定数を『Const.dll』として作成しています。
「Const.dll」には「Public Const TEST_PATH AS String = "C:\Temp";」のように、パスが記載されています。

利用側モジュール(ex. Test.exe)で、それを参照設定して利用しています。

仕様変更によりパスが変更になり、「Public Const TEST_PATH AS String = "C:\Temp\test";」のように「Const.dll」を修正しました。

基本的な勘違いかもしれませんが、「Const.dll」を修正したことにより、利用側モジュールも再度リビルドしなければいけないのでしょうか。

参照設定なので、リビルドしなくても、利用側モジュールが起動したときに、「Const.dll」を読み直しして、仕様変更後のパスで処理をおこなうだろうと思っていたいのですが、
リビルドしていない状態であれば、「Const.dll」をいくら変更しても、仕様変更前のパスで処理しようとしています。

参照設定先のモジュールを修正した場合、参照設定元のモジュールもリビルドしなおさなければならないのであれば、あまり参照設定の旨味がないような気がしています。

参照設定そのものに問題があるかもしれません。
情報が不十分であれば、その旨お願いいたします。

申し訳ありませんが、教えてください。

A 回答 (3件)

ConstではなくShared ReadOnlyにしましょう。



Public Shared ReadOnly TEST_PATH As String = "C:\Temp"
    • good
    • 1
この回答へのお礼

ご回答いただいた内容で解決しました!ありがとうございました!
他のご回答いただいた方もご協力ありがとうございました!

お礼日時:2009/06/10 21:48

その程度の修正であれば、普通は利用側(参照している方)はビルドし直す必要無く、古いDLLに上書きコピーするだけでOKのはずです。



念のため確認ですが、まず、

・古いのを参照しているというのは、
 参照する側のVisual Studio上での動きか?
 それとも、参照する側をビルドして、VisualStudioを介さずに
 動かしたときの話か?

この点がちょっとよく分かりません。開発環境か、稼働環境かということですね。稼働環境であれば、冒頭に書いたとおり「これまでのConst.dllに新しいConst.dllを上書きするだけ」です。

Visual Studio上での動きについてであれば、まず確認すべきなのは

・変更したConst.dllの完成品を、Const.dllを利用する(参照する)ソースが
 参照している場所に正しく置いていますか?

ですね。参照先のパスはプロジェクトのプロパティに出ているはずなので、そのフォルダに「新しいConst.dllが置いてあるか」を確認するのが先決です。置いてあるのに参照がおかしい場合、ありそうなのは「ローカルコピーがFalseになっていて、参照しているフォルダと、デバッグモードなどで動かすときのフォルダに違うバージョンのConst.dllが入ってる」というようなケースですね。
基本、ローカルコピーはTrueのまま使うのをお勧めします。そうすれば、参照先とVisual Studio上での動作フォルダのDLLは同一になるので、普通は問題になりません。

なお、この手の問題を回避/予防/検出する良い方法として、DLLのバージョン番号を変更のたびに更新し、機能の変更とバージョン番号の対応をきちんと記録しながら「今使ってるDLLはどのバージョンか」がバージョン番号で判るようにするというものがあります。
一旦混乱が起きると、ちょっとした間違いでもあっという間に時間を消費するので、面倒かもしれませんがこうした管理をきちんとすることでトータルの作業時間は少なくなりやすいです。

ダラダラ書きましたが、参考になれば幸いです

この回答への補足

申し訳ございません、古いのを参照しているのは「参照する側はビルドせず、VisualStudioを介さずに動かした場合」です。

そして参照設定で、「ローカルコピー = True」にしています。
基本的には上書きするだけ、というイメージはあっているということですね。認識相違がなくて良かったです。

ただ、動作が想定どおりでないので、困ってはいますが。

さらに現状を詳しく書かせていただくと、
実行EXEを起動すると、別出しで処理を記載しているDLL((1))を呼び出します。

(1)の別だし処理DLLで、質問させていただいた「Const.dll」をImportし、(1)の処理を行っています。

新しい「Const.dll」の参照設定が正しいことを確認した上で、
DLL((1))を再ビルドすると、変更後パスで処理するようになりました。「Const.dll」を上書きしても、再ビルドしていないDLL((1))では、変更前パスで処理しようとしています。

他に何か考えられることはありませんでしょうか。

お手数をお掛けしますが、よろしくお願いします。

補足日時:2009/06/10 13:36
    • good
    • 0

参照設定で指定したDLLをローカルコピー=Trueにしていませんか?


つまり 他の場所にあるDLLを自分のプロジェクトの出力フォルダーにコピーする設定ですとご質問のような現象になると思います

この回答への補足

ご回答ありがとうございます。
参照設定のローカルコピーをFALSEにしても、同様の事象が発生してしまいます。

ビルドした利用側モジュールのなかには、Const.dllの情報も含まれているのでは、と思ってしまいます。

補足日時:2009/06/10 13:35
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています