- PR -

[VB.NET] DLLの参照設定は、どのファイルで管理しているのでしょうか

1
投稿者投稿内容
ヤンヤン
会議室デビュー日: 2008/05/08
投稿数: 7
投稿日時: 2008-09-24 14:31
VB.NETでMircrosoft Visual Studio.NET 2003を使っていますが、dllの参照設定を変えようとしたところ、いくら削除→追加をしても、Mircrosoft Visual Studio.NET 2003を立ち上げると、元の設定場所に戻ります。どういう現象でしょうか?

既存のパス:"C:\\BOS\\apl\\client\\C1.Win.C1TrueDBGrid.dll"
設定したいパス:"C:\\Program Files\\FlexGridNETwin\\Bin\\C1.Win.C1TrueDBGrid.dll"

ちなみに、.vbprojの中には、
<Reference
Name = "C1.Win.C1TrueDBGrid"
AssemblyName = "C1.Win.C1TrueDBGrid"
HintPath = "..\\..\\..\\Program Files\\TrueDBGridNETwin\\Bin\\C1.Win.C1TrueDBGrid.dll"
Private = "False"
/>
になっています。.NET 2003をなぜ、.vbprojの設定通りにならなかったのでしょうか?

尚、このアプリケーションは、slnに多数のvbprojから構成しております。

ご存知の方、ご教授下さい。

よろしくお願いします。



rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-09-24 14:49
1つだけ心当たりがあったので。

引用:

ヤンヤンさんの書き込み (2008-09-24 14:31) より:
VB.NETでMircrosoft Visual Studio.NET 2003を使っていますが、dllの参照設定を変えようとしたところ、いくら削除→追加をしても、Mircrosoft Visual Studio.NET 2003を立ち上げると、元の設定場所に戻ります。どういう現象でしょうか?


太字にした部分の操作は、Visual Studio上でされたんですよね?
であればその操作の後、ソリューションエクスプローラからプロジェクトを選択した状態で、「保存」を実行してみてください。
それできっと .vbprojファイルが更新されると思いますので、エクスプローラなどからタイムスタンプが変わることを確認してみてください。

# 「すべて保存」でも大丈夫かもしれないけどうろ覚え
ヤンヤン
会議室デビュー日: 2008/05/08
投稿数: 7
投稿日時: 2008-09-24 15:30
rainさん
ご回答、ありがとうございます。

実は、最初私も保存し忘れのではと思って、rainさんの指摘の方法で保存をしました。プロジェクトファイル.vbprojからも確認して、(HintPath = "..\\..\\..\\Program Files\\TrueDBGridNETwin\\Bin\\C1.Win.C1TrueDBGrid.dll")になっていました。にもかかわらず、一旦Visual Studioを終了して再立ち上げるときに、リコンパイルをすると、まだエラーとなり、ソリューション エクスプローラから参照設定を開き、マウス右ボタンでプロパティで確認すると、元のパスの「C:\BOS\apl\client\C1.Win.C1TrueDBGrid.dll」になっています。

可笑しいです。

ちなみに、グローバル アセンブリ キャッシュに設定されたのかと思い、グローバル アセンブリ キャッシュを調べましたが、設定はありませんでした。
ヤンヤン
会議室デビュー日: 2008/05/08
投稿数: 7
投稿日時: 2008-09-24 15:51
この現象は、.NET 2003のバグのようです(推測)。

なぜかというと、既存のパス:"C:\\BOS\\apl\\client\\C1.Win.C1TrueDBGrid.dll"
からこのdllを削除すると、.vbprojの設定パスになりました。

やはりdllの履歴に影響するようです。

仕様かバグかわかりませんが、使う人から見ると、バグぽいです。
→使用者の意志に従わない、ツールの都合で勝手に設定

.NET 2005、.NET 2008はどうなっているのでしょうか?

[ メッセージ編集済み 編集者: ヤンヤン 編集日時 2008-09-24 15:54 ]
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-09-24 15:55
んー、何ででしょうね。ちょっとその現象には心当たりがないです。
リコンパイルのときに戻ってしまうということは、少なくともどこかには元のフォルダ情報が残ってそうではありますね。

ソリューションフォルダ以下の全ファイルを「BOS\apl\client」でgrep検索して、どこかに痕跡が残っていないか…このくらいしか調べ方を思いつかないです。

rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-09-24 16:02
ぐぐったら関連するっぽいスレッドを見つけました。
http://www.microsoft.com/japan/msdn/community/gdn/ShowPost-35249.htm

で1つ思い出したのですが、プロジェクトのプロパティで、DLLを参照する先のパスが記録されていたと思います。
# その上のほうから順にDLLを探しにいって、見つかったところを使う仕様だったハズ

たぶんそこに古いフォルダが残っていると思いますので、それを削除してあげれば大丈夫だと思います。
手元にVS2003がないので、具体的にこことは言えないのですが。

ちなみにVS2003の場合は、DLLを参照したときに参照パスも勝手に追加されていたのですが、VS2005だと勝手には追加されないので、結果的に大丈夫だと思われます。
手で参照パスを追加したときにどうなるかは未検証。

-----
だんだん思い出してきたので一部修正・追記


[ メッセージ編集済み 編集者: rain 編集日時 2008-09-24 16:14 ]
ヤンヤン
会議室デビュー日: 2008/05/08
投稿数: 7
投稿日時: 2008-09-24 16:05
引用:


ソリューションフォルダ以下の全ファイルを「BOSaplclient」でgrep検索して、どこかに痕跡が残っていないか…このくらいしか調べ方を思いつかないです。





grep検索して調べましたが、痕跡がありませんでした。

尚、VSSから古いソリューションフォルダを取得しても(参照パスはさらに別物)、.NET 2003を立ち上げてみると、依然"C:\\BOS\\apl\\client\\C1.Win.C1TrueDBGrid.dll"です。そのバージョンときに、"C:\\BOS"はまだ出来ていませんが
masa
大ベテラン
会議室デビュー日: 2004/10/28
投稿数: 161
投稿日時: 2008-09-24 19:06
引用:


で1つ思い出したのですが、プロジェクトのプロパティで、DLLを参照する先のパスが記録されていたと思います。
# その上のほうから順にDLLを探しにいって、見つかったところを使う仕様だったハズ




参照パスは *.vbproj.user に記録されていますね。
1

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