- - PR -
VB.NETで作成したクラスの登録について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-08-16 15:03
いつも勉強させていただいております。
掲題の件ですが、まず、VB.NET 2003で作成したクラスを Windows2003 ServerにC:\hoge\hoge.dllのように設置しました。 次に、そのクラスを使用するASP.NETのプロジェクト内で、 クラスのプロパティのローカルコピーをFalseに設定しました。 ASP.NETをビルドして、いざ動かしてみると、 「ファイルまたはアセンブリ名 hoge、またはその依存関係の 1 つが見つかりませんでした。」というエラーが表示されてしまいます。 もしやと思い、Windows2003 Server上で、 regsvr32.exe c:\hoge\hoge.dll を実行してみましたが、 今度は「c:\hoge\hoge.dllは読み込まれましたが、DllRegisterServerエントリ ポイントが見つかりませんでした」というメッセージが出てしまいます。 ご存知の方がいらっしゃいましたら、ぜひ、お知恵をおかし下さい。 | ||||||||
|
投稿日時: 2005-08-16 15:46
TXさん、こんにちは。
True にしましょう。 ローカルコピーなしで動くのは、GAC(グローバル・アセンブリ・キャッシュ)に置かれたアセンブリを参照している場合です。 | ||||||||
|
投稿日時: 2005-08-16 17:33
きくちゃん様、早速のレスありがとうございました。
ローカルコピーを“True”に設定する件は、今後そのように 設定・運用していきたいと思います。 ただ気になった点ですが、例えば前述のhoge.dllを使用するWebページ プログラムが仮に100個あったとすれば、それぞれの仮想ディレクトリの binフォルダ内に、hoge.dllが点在する事になりますが…これは、 仕方ないと言いますか、こういうものと割り切るものなのでしょうか? また、hoge.dll自体を修正変更等おこなった場合、 簡単にかつ間違いの無いように再配布を行うには 如何すればよろしいでしょうか? 申し訳ございませんが、教えて下さい。 | ||||||||
|
投稿日時: 2005-08-17 09:29
TXさん、お早うございます。
そういった場合はGACに置く事を検討しても良いかも知れません。 ただ、
これを実現するためには .NET Framework 開発者ガイド のアセンブリに関する説明、とくにアセンブリのバージョン管理とか配置とかを調べてみて下さい。 | ||||||||
|
投稿日時: 2005-08-18 11:51
厳密名(StrongName)を付ければ
c:\hoge\hoge.dllに置いていても大丈夫だと思いますけど。 付いていない場合は呼び出すファイルの置いてあるディレクトリと同じ場所かそれ以下のディレクトリにないとだめだったと思います。 GACに置くのは感心しませんね。TXさんの会社の製品全てで使う基礎のアセンブリとかならともかく、ですけど。 そういった、そうそう変更の無い共通部分ってのはそう簡単に作れるものじゃないですよ。 どうせ次のアプリケーションを作る時に変更や追加が発生して、1つのバージョンのアセンブリは1つのアプリケーションからしか参照しないというのがオチだと思います。 少なくとも、1つのアプリケーションを作っている時に 「これ共通で使えそうじゃない?」 ってことで切り出したものを集めたアセンブリはGACに置いちゃだめです。 参考: http://www.atmarkit.co.jp/fdotnet/technology/idnfw11_03/idnfw11_03_03.html | ||||||||
|
投稿日時: 2005-08-19 13:25
一郎さん、こんにちは。
これってやった事無いんですよね…。実はどういうときに使う手法なのかも良く判らなかったりします。(^^; 元質問者の方の言うように、仮に100のプロジェクトから使用されるような部品の場合、全てのプロジェクトでアセンブリの所在を指定しないといけないんですよね? 違うかな…? しかし、100のプロジェクトから参照されるような部品を、本気で開発するつもりなら、GAC に置く事を検討するのは悪い事ではないと思います。もちろん、本気の度合いによりますけどね。 例えば、一郎さん自身も仰っているような、フレームワーク的というかインフラ的というか、まあ、その手のものとか。汎用性という意味ではコントロール・コンポーネント類が向いているかな。 | ||||||||
|
投稿日時: 2005-08-19 14:28
DLLを複数のEXEから利用しようという発想の、もともとの動機の大きなものが
メモリーの節約 ハードディスクの節約 ですから、その必要があまりないならEXE毎においたほうがよいでしょう。 DLLが共有される・共有できることによる問題はかなり深刻な事態をまねきます。 _________________ たつごろー codeseek こみゅぷらす |
1