トップ回答者
app.configの値取得方法

質問
-
こんにちは。
VS2005C#でウィンドウズアプリケーションを作成しています。
設定をapp.configに設定しようとしていますが、以下のような設定値を読み込みたいのですが、どのようにすれば良いでしょうか?
略称Aと正式名A123との対応一覧を取得し、Hashtableに設定しようとしています。
<test>
<conv>
<ryaku>A</ryaku>
<name>A123</name>
</conv>
<conv>
<ryaku>B</ryaku>
<name>B572</name>
</conv>
<conv>
<ryaku>C</ryaku>
<name>CCC</name>
</conv>
</test>
app.configから値を取得する方法を検索すると、
<configuration>
<appSettings>
<add key="Test" value="テスト!!" />
</appSettings>
このような設定なら
string test = ConfigurationSettings.AppSettings["Test"];
のようにして取得できるようですが、これはデータ構成が違うので使えないですよね。
app.configをDOMなどで解析するしかないでしょうか?
回答
-
何が問題なのか書いてないので、・<add key=K value=V> ではなく、独自のXML形式で app.config に設定したい・<add key=K value=V> でもよいが、Hashtable 型で設定値をまとめて取得したいの2通りの読み方ができます。前者であれば、すでに書かれているように専用のカスタムセクションハンドラを作成してください。System.Xml ネームスペースを使用したことがあれば非常に簡単でしょう。後者であれば、DictionarySectionHandler を使えば Hashtable 型で取得できます。
-
VB.NETですがわかりやすいサンプルがありましたので参考まで。
[HOWTO] Visual Basic .NET で独自の ASP.NET 構成セクション ハンドラを作成する方法
http://support.microsoft.com/kb/318457/ja
すべての返信
-
何が問題なのか書いてないので、・<add key=K value=V> ではなく、独自のXML形式で app.config に設定したい・<add key=K value=V> でもよいが、Hashtable 型で設定値をまとめて取得したいの2通りの読み方ができます。前者であれば、すでに書かれているように専用のカスタムセクションハンドラを作成してください。System.Xml ネームスペースを使用したことがあれば非常に簡単でしょう。後者であれば、DictionarySectionHandler を使えば Hashtable 型で取得できます。
-
VB.NETですがわかりやすいサンプルがありましたので参考まで。
[HOWTO] Visual Basic .NET で独自の ASP.NET 構成セクション ハンドラを作成する方法
http://support.microsoft.com/kb/318457/ja
-
皆さん、ありがとうございました。
大型連休でレスが遅くなってしまいました。
やりたかった事は構成セクションハンドラの作成です。
log4netを使っているのですが、log4net独自のタグをapp.configに記述しているので、
同じように独自の設定をapp.configに記述する方法があるのだろうと思っていましたが、
キーワードがわからずうまく調べる事が出来なかった状態でした。
実際には、以下ページを参考にしてXmlSerializationを使用して使いまわししやすいも
のを実装する事が出来ました。
http://japan.internet.com/developer/20050822/26.html
.Net Framework2.0からのやり方もあるようですので、調べてみたいと思います。
余談ですが、ふじさきさんに教えていただいたURLを参考にしている時に
面白い(?)ページを見つけました。
VB.NETのコードをC#に変換するページです。
http://www.developerfusion.co.uk/utilities/convertvbtocsharp.aspx
試してみたらちゃんと変換されているようでした。