.DLLの.NET構成ファイルを作成することは簡単ではありません。.NET構成メカニズムには多くの機能が組み込まれており、アプリの簡単なアップグレード/更新を容易にし、インストールされたアプリがお互いの設定ファイルを踏みつぶさないように保護します。
DLLの使用方法とアプリケーションの使用方法には大きな違いがあります。同じユーザーの同じマシンにアプリケーションの複数のコピーがインストールされることはほとんどありません。しかし、100個の異なるアプリやライブラリがすべて.NET DLLを利用している場合もあります。
1つのユーザプロファイル内のアプリの異なるコピーに対して個別に設定を追跡する必要はめったにありません一方で、それはだ非常にあなたがお互いに共有設定にDLLのさまざまな用途のすべてをしたいとは考えにくいです。このため、 "通常の"メソッドを使用して構成オブジェクトを取得すると、返されるオブジェクトは、特定のアセンブリではなく、実行中のアプリドメインの構成に関連付けられます。
アプリドメインは、コードが実際にあるアセンブリをロードしたルートアセンブリにバインドされています。ほとんどの場合、これはメインの.EXEのアセンブリであり、.DLLをロードしたものです。アプリケーション内の他のアプリドメインを起動することは可能ですが、そのアプリドメインのルートアセンブリが何であるかに関する情報を明示的に提供する必要があります。
このため、ライブラリ固有の構成ファイルを作成する手順はあまり便利ではありません。これは、特定のアセンブリに関連付けられていない任意のポータブル構成ファイルを作成するために使用するのと同じプロセスですが、.NETのXMLスキーマ、構成セクション、構成要素のメカニズムなどを利用する必要がありExeConfigurationFileMap
ます。これには、オブジェクトの作成が必要です。、データをロードして設定ファイルが保存される場所を特定し、次にを呼び出しConfigurationManager
ます。OpenMappedExeConfiguration
新しいConfiguration
インスタンスにそれを開く。これがします自動パス生成メカニズムによって提供されるバージョンの保護からあなたを遮断します。
統計的に言えば、おそらくこのライブラリを社内設定で使用しており、1台のマシン/ユーザー内で複数のアプリがそれを利用することはほとんどありません。 しかし、そうでない場合は、覚えておくべきことがあります。DLLに単一のグローバル構成ファイルを使用する場合、それを参照しているアプリに関係なく、アクセスの競合を心配する必要があります。ライブラリを参照する2つのアプリが同時に実行され、それぞれが独自のConfiguration
オブジェクトを開いている場合、1つが変更を保存すると、次に他のアプリでデータを取得または保存しようとすると例外が発生します。
これを回避する最も安全で簡単な方法は、DLLをロードしているアセンブリがそれ自体に関するいくつかの情報も提供することを要求するか、参照アセンブリのアプリドメインを調べて検出することです。これを使用して、DLLを参照するアプリごとに個別のユーザー構成ファイルを保持するための、ある種のフォルダー構造を作成します。
あなたがいる場合は、特定のあなたのDLLのために、それが参照されているに関係なく、グローバル設定を持つようにしたい、あなたはむしろ、.NETが自動的に適切なものを考え出すよりも、それのためにあなたの場所を決定する必要があります。また、ファイルへのアクセスの管理についても積極的に取り組む必要があります。Configuration
ロードまたは保存にかかる時間だけインスタンスを保持し、直前に開いて直後に破棄することで、可能な限りキャッシュする必要があります。そして最後に、ライブラリを使用するアプリの1つによって編集されている間、ファイルを保護するためのロックメカニズムが必要になります。