- - PR -
共通モジュール
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-10-29 21:16
掲題の件について有識者のご意見を聞かせて下さい。
現在、アプリケーションの拡張性を考えて、プラグインにより、 機能を拡張・置換させようと考えています。 プラグインの仕組み自体はCodeZineのサイトなどを参考にしています。 そこで、アプリケーションの配置を [ルートフォルダ] | +----[メインシステム用フォルダ(メインのEXEなど)] | +----[プラグイン用フォルダ(プラグインのDLL)] | +----[共通モジュール用フォルダ(ユーティリティ関数などを含むDLL)] | +----[設定ファイル用フォルダ(各種設定ファイル INIなど)] [App] | +----[bin] | +----[plugin] | +----[lib] | +----[config] といった形にしたいと思っています。 そこで、質問の件なのですが、共通で使いたいモジュールまで リフレクションを使っては、やはり開発時に面倒だと思うのですが、 どうにかして、解消する方法はないでしょうか? 基本的にstatic関数を『クラス名.関数名』として呼び出したいのです。 判り難い説明とは思いますが、宜しくお願い致します。 | ||||
|
投稿日時: 2005-10-29 21:20
有識者です。
共通モジュール用フォルダ内にあるアセンブリを参照するわけにはいかないんですか? リフレクションは使わないとなれば、コンパイル時に静的に参照しておくしかない(というかこちらが正道)と思いますが。 | ||||
|
投稿日時: 2005-10-29 22:09
.NETFramework自体を余り長い期間触れていないので、
私の知識不足かもしれませんが、 共通モジュール用フォルダ内のアセンブリを参照するというのは、 VS.NETの開発環境で参照の追加をするということでしょうか? コンパイル時に静的に参照するのは特に問題ないと思います。 (DLLの参照でもプロジェクト参照でも) ただ、実行時には同じフォルダ内かGAC(でしたっけ?)にDLLが無い場合、 リフレクションなどを使わないといけないのではないのですか? 実際、コンパイル時に参照を追加した場合、ローカルコピーされて使用しますよね? ローカルコピーをFalseに設定しても、 実際の実行時にはモジュールが参照できない気がするのですが? | ||||
|
投稿日時: 2005-10-29 22:23
構成ファイル(app.config)に設定することにより、任意のサブディレクトリにアセンブリを配置することが可能です。
http://www.atmarkit.co.jp/fdotnet/technology/idnfw11_03/idnfw11_03_03.html 厳密名を付ければ絶対パスとかでも指定できたりします。 | ||||
|
投稿日時: 2005-10-29 22:30
いいえ。 ランタイムがアセンブリを検索する方法 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconhowruntimelocatesassemblies.asp | ||||
|
投稿日時: 2005-10-30 11:38
色々と有難うございます。
今、開発環境が手元にないので、構成ファイル(APP.config)などは 月曜日以降に確認してみたいと思います。 まだ、幾つが疑問があるのですが、 一郎氏の静的参照とは、この構成ファイルの事なのでしょうか? また、構成ファイルを使用した場合、例えばプラグイン用フォルダに プラグインが数百個(DLLが数百個)あった場合、 そのプラグイン1つ1つに構成ファイルを作らなければならないのでしょうか? 既存システムをこういった構成にアプリケーションを作り直すので プラグイン(機能)の数が100個以上になる可能性が大きいので、 この辺り、構成ファイルの数が多くなると記述ミスなどでの バグが出る可能性があるので、大変危惧しております。 | ||||
|
投稿日時: 2005-10-30 12:37
いわたと申します。
メインのアプリケーションがプラグイン用のDLLを読み込む際にフルパス指定 すればいいだけなので、構成ファイルとかは考えなくても出来ると思いますよ。 あとは、AppDomain.AppendPrivatePathを使ってみるとか。 | ||||
|
投稿日時: 2005-10-30 14:04
有識者です。
(冗談で書いたんですけど、何か音的にいい響きですね。ハンドル名を"有識者"にしようかしら。)
私が書いたのは、実行時のアセンブリ検索の話ではなくて、プログラムを書いている時の型情報の参照の話です。 リフレクションを使いたくないということでしたので、コンパイル時に参照しておけば『クラス名.関数名』などと書けますね、という話。 これはコンパイル時の話で、実行した時にどのアセンブリファイルを読み込むかはHongliangさんや渋木さんが提示されているような仕組みになっています。 実際アセンブリ内には、参照するアセンブリの名前やバージョンの情報はあっても"どこにあるアセンブリ"という情報は含まれていません。 |
1|2|3
次のページへ»