- - PR -
VB.NETでのクラスライブラリ配布について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-05-11 11:08
こんにちは、.NET初心者です。
現在、VB.NETの環境で、業務ロジック/画面を持つEXEと、共通機能を持つ クラスライブラリ(DLL)という構成で開発をしています。 ところが、EXEからDLLの参照がうまく行えずに困っています。 開発環境では、参照の追加で「プロジェクト」タブに追加されるのでいいの ですが、実行環境としては追加できないのでしょうか? どこかパスの通ったディレクトリにDLLを置いておくようなイメージにした いのです。 VCで作った素のDLLなら、LIBを作って、DLL本体はPATHが通ったディレク トリに置けば参照できますし、VBでのOCXなら、REGSRV32.EXEで登録でき ると思うのですが、.NETではどうすればできるのでしょうか? 作成したクラスライブラリをなんらかのツールで登録すれば、参照設定の 「.NETタブ」に表示されて使用できる・・・ セットアッププロジェクトにDLLを追加すれば、Setup.exe実行時に参照 パスがシステムに追加される・・・ など、そういうイメージの方法ができるのでは、と思うのですが。 EXEと同じディレクトリに入れておけばとりあえず参照してくれますが、 DLL自体はEXE側に入れずに、参照パスのみ設定したいのです。 もしわかる方いらっしゃいましたら、よろしくお願いいたします。 | ||||||||
|
投稿日時: 2004-05-11 11:32
ところで、
ちょっと情報が古い(VS.NET2002時代)のですが、 「VS .NET と VSS を使用したチーム開発 - 第 4 章 依存関係の管理」の中の、 「独自のアセンブリを [.NET] タブに追加するには 」という項目にあります。 とはいえ、これはVS.NET2002時代の情報ですし、そもそもレジストリを触ることになりますので要注意です。 <追加情報> ほぼ同じ内容ですが、「306149 - [INFO] [参照の追加] ダイアログ ボックスにアセンブリを表示する方法」もあります。 でも、やっぱりVS.NET2002が対象で、情報が古いです。 [ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2004-05-11 11:37 ] | ||||||||
|
投稿日時: 2004-05-11 12:31
>開発環境では、参照の追加で「プロジェクト」タブに追加されるのでいいの
>ですが、実行環境としては追加できないのでしょうか? プロジェクト参照すれば、.exe をビルドした時に、クラスライブラリの .dll も .exe と同じディレクトリにコピーされていませんか? .NET 時代は side-by-side が基本なので、その状態で配布するのが原則です。 GAC への配置は慎重に検討しないと、後で泣きを見ます。 _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||||||
|
投稿日時: 2004-05-11 12:40
もし、1つのソリューションとしてまとめて、Visual SourceSafeで管理することで競合を回避できるなら、それが一番簡単です。 .NETではDLL-HELLを解消する為、GACに登録してバージョン管理するか、EXEと同じディレクトリにあるDLLのみを参照します。GACの登録は、署名しなければならなかったりなんやかんやがあるので、特に開発中はお勧めしません。開発が終わって「ほぼ誰も触らない」ことが確定したら、登録するのも1つの方法ですが。「新しいスタイル」として、受け入れましょう。。。(消極的な感じもするが) | ||||||||
|
投稿日時: 2004-05-11 12:42
こんにちわわわ
私個人的には .dll という拡張子はやめてほしかったです。 特に深い意味はありませんが。 _________________ | ||||||||
|
投稿日時: 2004-05-11 12:56
DEVPATH環境変数にパスを設定したり、アプリケーション構成ファイルでパスを指定したりできるみたいですね。
アプリケーション構成ファイルで設定する場合は、厳密名が付いていないとexeのあるフォルダ以下以外はだめらしいですが。 参考: http://www.atmarkit.co.jp/fdotnet/technology/idnfw11_03/idnfw11_03_01.html | ||||||||
|
投稿日時: 2004-05-11 13:07
こんにちわわわ。
GACというキーワードと話の流れで、ある程度アーキテクチャがつかめました。 たくさんの助言ありがとうございます。 GACの詳細まではつかんでいませんが、バージョン管理という話から、特定の フォルダでランタイムリソースを一括管理する仕組み、と把握しています。 名前の重複などを回避したんですね。 >.NET 時代は side-by-side が基本なので、その状態で配布するのが原則です。 >GAC への配置は慎重に検討しないと、後で泣きを見ます。 >GACの登録は、署名しなければならなかったりなんやかんやがあるので、 >特に開発中はお勧めしません。 このあたりの言葉をありがたくいただいておきます。 どうもありがとうございました。 | ||||||||
|
投稿日時: 2004-05-11 17:35
こんばんわ。
えーと、解決しましたので一応報告まで。 GACは色々ありそうなので「どうしようかねー」ということで。 DEVPATH通すのはできました。 1).NETランタイムの設定で、外部パスを見に行くフラグを立てる。 2)環境変数「DEVPATH」に外部パス(DLLの置き場所)を設定する。 で、従来のDLLのような使い方ができました。 .NETランタイムの設定は「%runtime install path%\Config」以下の 「machine.config」ファイルにてできました。 通常は「C:\WINNT\Microsoft.NET\Framework\v1.0.3705\CONFIG\machine.config」 とかですね。 ここに。 ------------------------------------------------------- <configuration> <runtime> <developmentMode developerInstallation="true"/> </runtime> </configuration> ------------------------------------------------------- こんな感じでフラグを立てると、DEVPATHが有効になります。 んで、環境変数DEVPATHに検索ディレクトリ設定すればおっけー。 ただ、検索ディレクトリ、一番最後の1文字を強制削除するみたいです。 「C:\WINNT\system32」と書くと、「C:\WINNT\system3」を探します。 最後の「\」を削除してるつもりなんだろうけど・・・ もしかしたら、「Application1.exe.config」とかを作って置いとけば アプリごとの設定ができるかも知れませんが、そこまで試してません。 あとはDLL-HELLに気をつけて検討します。 さんくすでした。 |