- PR -

VB.NETで作成したクラスの登録について

1
投稿者投稿内容
TX
会議室デビュー日: 2005/08/16
投稿数: 3
投稿日時: 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エントリ
ポイントが見つかりませんでした」というメッセージが出てしまいます。

ご存知の方がいらっしゃいましたら、ぜひ、お知恵をおかし下さい。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2005-08-16 15:46
TXさん、こんにちは。

引用:

クラスのプロパティのローカルコピーをFalseに設定しました。


True にしましょう。

ローカルコピーなしで動くのは、GAC(グローバル・アセンブリ・キャッシュ)に置かれたアセンブリを参照している場合です。

TX
会議室デビュー日: 2005/08/16
投稿数: 3
投稿日時: 2005-08-16 17:33
きくちゃん様、早速のレスありがとうございました。

ローカルコピーを“True”に設定する件は、今後そのように
設定・運用していきたいと思います。
ただ気になった点ですが、例えば前述のhoge.dllを使用するWebページ
プログラムが仮に100個あったとすれば、それぞれの仮想ディレクトリの
binフォルダ内に、hoge.dllが点在する事になりますが…これは、
仕方ないと言いますか、こういうものと割り切るものなのでしょうか?

また、hoge.dll自体を修正変更等おこなった場合、
簡単にかつ間違いの無いように再配布を行うには
如何すればよろしいでしょうか?

申し訳ございませんが、教えて下さい。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2005-08-17 09:29
TXさん、お早うございます。

引用:

ただ気になった点ですが、例えば前述のhoge.dllを使用するWebページ
プログラムが仮に100個あったとすれば、それぞれの仮想ディレクトリの
binフォルダ内に、hoge.dllが点在する事になりますが…これは、
仕方ないと言いますか、こういうものと割り切るものなのでしょうか?


そういった場合はGACに置く事を検討しても良いかも知れません。
ただ、

引用:

また、hoge.dll自体を修正変更等おこなった場合、
簡単にかつ間違いの無いように再配布を行うには


これを実現するためには
.NET Framework 開発者ガイド のアセンブリに関する説明、とくにアセンブリのバージョン管理とか配置とかを調べてみて下さい。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 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
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2005-08-19 13:25
一郎さん、こんにちは。

引用:

c:hogehoge.dllに置いていても大丈夫だと思いますけど。


これってやった事無いんですよね…。実はどういうときに使う手法なのかも良く判らなかったりします。(^^;

元質問者の方の言うように、仮に100のプロジェクトから使用されるような部品の場合、全てのプロジェクトでアセンブリの所在を指定しないといけないんですよね? 違うかな…?

しかし、100のプロジェクトから参照されるような部品を、本気で開発するつもりなら、GAC に置く事を検討するのは悪い事ではないと思います。もちろん、本気の度合いによりますけどね。
例えば、一郎さん自身も仰っているような、フレームワーク的というかインフラ的というか、まあ、その手のものとか。汎用性という意味ではコントロール・コンポーネント類が向いているかな。
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-08-19 14:28
DLLを複数のEXEから利用しようという発想の、もともとの動機の大きなものが
メモリーの節約
ハードディスクの節約
ですから、その必要があまりないならEXE毎においたほうがよいでしょう。

DLLが共有される・共有できることによる問題はかなり深刻な事態をまねきます。

_________________
たつごろー
codeseek
こみゅぷらす
1

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