トップ回答者
App.config への外部設定ファイルのインクルード(再帰的 or 複数ファイルインクルード)

質問
-
お世話になります。
現在、Windowsフォームのアプリケーションを開発していまして、App.configファイルを使って設定値を管理しています。
その中で、一部の共通的な設定項目を外部ファイルに外出しして、複数のアプリケーションからその外部設定ファイルをインクルードして使いたいと考えています。
そのような中、外部ファイルをインクルードする方法はわかったのですが、その外部ファイルから、そのまた外部ファイルをインクルードする=再帰的なインクルード のようなことができないかなと考えています。
無理でしょうか?
もしくは、再帰的ではないものの、1つのメインApp.configに、複数の外部設定ファイルをインクルードすることは可能でしょうか。
お詳しい方がいらっしゃいましたら、ぜひご助言頂きたく存じます。
よろしくお願い致します。
メインのApp.config<configuration>
<appSettings file="<外部設定ファイル名>">
<add key="個別画面設定1" value="個別画面設定値1" />
<add key="外部設定1" value="個別画面で定義された外部設定値1" />
</appSettings>
</configuration>
外部設定ファイル<?xml version="1.0" encoding="utf-8" ?>
<appSettings>
<add key="外部設定1" value="外部設定値1" />
<add key="外部設定2" value="外部設定値2" />
</appSettings>
回答
-
まみや さんからの引用 無理でしょうか?
appSettings やカスタムセクションなど、アプリケーション独自の設定部分であれば、読み込み処理を自由に作成することができるため、自身で実装を行えばどのような要求にも耐えられます。.NET 1.1 では IConfigurationSectionHandler というインターフェスを使用していましたが、.NET 2.0 以降では ConfigurationSection を派生したクラスを作成するようになっています。ConfigurationSection には「宣言モデル(または属性付きモデル)」と「プログラムモデル」の2種類があり、Visual Studio 2005 などで構成ファイルを作成すると、前者である宣言モデルの ConfigurationSection の実装が自動的に作成されるのを目にしたことがあるかもしれません。ドキュメントの System.Configuration 以下のクラスの説明を見ていくと、「宣言モデル」と「プログラムモデル」に関して異なる記述が個別に行われているのも確認できると思います。読み込み処理のカスタマイズで必要になるのは プログラムモデル に関するものです。標準の ConfigurationElementCollection では <add key="string" value="string" /> <remove key="string" /> <clear /> の3操作しかありませんが、ConfigurationElement を派生して、<include file="path" /> などのような外部ファイルの読み込み操作を追加した ConfigurationElementCollection を作成することが可能です。カスタムセクションの作成は、 ConfigurationSection は構造が複雑で、IConfigurationSectionHandler のほうがシンプルで簡単だったと思いますが、一度つくってしまえば利用する際には ConfigurationSection のほうが圧倒的に便利なので、頑張って作成してみる価値はあると思います。
すべての返信
-
まみや さんからの引用 無理でしょうか?
appSettings やカスタムセクションなど、アプリケーション独自の設定部分であれば、読み込み処理を自由に作成することができるため、自身で実装を行えばどのような要求にも耐えられます。.NET 1.1 では IConfigurationSectionHandler というインターフェスを使用していましたが、.NET 2.0 以降では ConfigurationSection を派生したクラスを作成するようになっています。ConfigurationSection には「宣言モデル(または属性付きモデル)」と「プログラムモデル」の2種類があり、Visual Studio 2005 などで構成ファイルを作成すると、前者である宣言モデルの ConfigurationSection の実装が自動的に作成されるのを目にしたことがあるかもしれません。ドキュメントの System.Configuration 以下のクラスの説明を見ていくと、「宣言モデル」と「プログラムモデル」に関して異なる記述が個別に行われているのも確認できると思います。読み込み処理のカスタマイズで必要になるのは プログラムモデル に関するものです。標準の ConfigurationElementCollection では <add key="string" value="string" /> <remove key="string" /> <clear /> の3操作しかありませんが、ConfigurationElement を派生して、<include file="path" /> などのような外部ファイルの読み込み操作を追加した ConfigurationElementCollection を作成することが可能です。カスタムセクションの作成は、 ConfigurationSection は構造が複雑で、IConfigurationSectionHandler のほうがシンプルで簡単だったと思いますが、一度つくってしまえば利用する際には ConfigurationSection のほうが圧倒的に便利なので、頑張って作成してみる価値はあると思います。