- PR -

共通モジュール

投稿者投稿内容
迦陵頻伽
常連さん
会議室デビュー日: 2005/07/25
投稿数: 21
投稿日時: 2005-10-29 21:16
掲題の件について有識者のご意見を聞かせて下さい。

現在、アプリケーションの拡張性を考えて、プラグインにより、
機能を拡張・置換させようと考えています。

プラグインの仕組み自体はCodeZineのサイトなどを参考にしています。

そこで、アプリケーションの配置を
[ルートフォルダ]
 |
 +----[メインシステム用フォルダ(メインのEXEなど)]
 |
 +----[プラグイン用フォルダ(プラグインのDLL)]
 |
 +----[共通モジュール用フォルダ(ユーティリティ関数などを含むDLL)]
 |
 +----[設定ファイル用フォルダ(各種設定ファイル INIなど)]

[App]
 |
 +----[bin]
 |
 +----[plugin]
 |
 +----[lib]
 |
 +----[config]

といった形にしたいと思っています。

そこで、質問の件なのですが、共通で使いたいモジュールまで
リフレクションを使っては、やはり開発時に面倒だと思うのですが、
どうにかして、解消する方法はないでしょうか?

基本的にstatic関数を『クラス名.関数名』として呼び出したいのです。

判り難い説明とは思いますが、宜しくお願い致します。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-10-29 21:20
有識者です。

共通モジュール用フォルダ内にあるアセンブリを参照するわけにはいかないんですか?

リフレクションは使わないとなれば、コンパイル時に静的に参照しておくしかない(というかこちらが正道)と思いますが。

迦陵頻伽
常連さん
会議室デビュー日: 2005/07/25
投稿数: 21
投稿日時: 2005-10-29 22:09
.NETFramework自体を余り長い期間触れていないので、
私の知識不足かもしれませんが、

共通モジュール用フォルダ内のアセンブリを参照するというのは、
VS.NETの開発環境で参照の追加をするということでしょうか?

コンパイル時に静的に参照するのは特に問題ないと思います。
(DLLの参照でもプロジェクト参照でも)

ただ、実行時には同じフォルダ内かGAC(でしたっけ?)にDLLが無い場合、
リフレクションなどを使わないといけないのではないのですか?

実際、コンパイル時に参照を追加した場合、ローカルコピーされて使用しますよね?
ローカルコピーをFalseに設定しても、
実際の実行時にはモジュールが参照できない気がするのですが?
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2005-10-29 22:23
構成ファイル(app.config)に設定することにより、任意のサブディレクトリにアセンブリを配置することが可能です。
http://www.atmarkit.co.jp/fdotnet/technology/idnfw11_03/idnfw11_03_03.html
厳密名を付ければ絶対パスとかでも指定できたりします。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-10-29 22:30
引用:

ただ、実行時には同じフォルダ内かGAC(でしたっけ?)にDLLが無い場合、
リフレクションなどを使わないといけないのではないのですか?



いいえ。

ランタイムがアセンブリを検索する方法
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconhowruntimelocatesassemblies.asp

迦陵頻伽
常連さん
会議室デビュー日: 2005/07/25
投稿数: 21
投稿日時: 2005-10-30 11:38
色々と有難うございます。
今、開発環境が手元にないので、構成ファイル(APP.config)などは
月曜日以降に確認してみたいと思います。

まだ、幾つが疑問があるのですが、
一郎氏の静的参照とは、この構成ファイルの事なのでしょうか?
また、構成ファイルを使用した場合、例えばプラグイン用フォルダに
プラグインが数百個(DLLが数百個)あった場合、
そのプラグイン1つ1つに構成ファイルを作らなければならないのでしょうか?

既存システムをこういった構成にアプリケーションを作り直すので
プラグイン(機能)の数が100個以上になる可能性が大きいので、
この辺り、構成ファイルの数が多くなると記述ミスなどでの
バグが出る可能性があるので、大変危惧しております。
いわた
会議室デビュー日: 2005/10/07
投稿数: 16
投稿日時: 2005-10-30 12:37
いわたと申します。

メインのアプリケーションがプラグイン用のDLLを読み込む際にフルパス指定
すればいいだけなので、構成ファイルとかは考えなくても出来ると思いますよ。

あとは、AppDomain.AppendPrivatePathを使ってみるとか。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-10-30 14:04
有識者です。
(冗談で書いたんですけど、何か音的にいい響きですね。ハンドル名を"有識者"にしようかしら。)
引用:

迦陵頻伽さんの書き込み (2005-10-30 11:38) より:
一郎氏の静的参照とは、この構成ファイルの事なのでしょうか?


私が書いたのは、実行時のアセンブリ検索の話ではなくて、プログラムを書いている時の型情報の参照の話です。
リフレクションを使いたくないということでしたので、コンパイル時に参照しておけば『クラス名.関数名』などと書けますね、という話。
これはコンパイル時の話で、実行した時にどのアセンブリファイルを読み込むかはHongliangさんや渋木さんが提示されているような仕組みになっています。
実際アセンブリ内には、参照するアセンブリの名前やバージョンの情報はあっても"どこにあるアセンブリ"という情報は含まれていません。

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