C#でアプリケーションを開発しています。
app.configに、下記のようにカスタムセクションCommonを追加しています。
(質問用に簡易化しただけで、実際には複数のカスタムセクションがあります)
xml
1 <?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3 <configSections> 4 <section name="Common" type="System.Configuration.NameValueFileSectionHandler" restartOnExternalChanges="false"/> 5 </configSections> 6 7 <Common> 8 <add key="key1" value="value1" /> 9 <add key="key2" value="value2" /> 10 <add key="key3" value="value3" /> 11 </Common> 12 </configuration>
この定義ファイルから値を取得する際には、下記のようなコードで実現できました。
C#
1 var cs = (NameValueCollection) ConfigurationManager.GetSection("Common"); 2 string value = cs["key1"];
しかし、逆にコード上から定義ファイルにデータを保存する方法が分かりません。
単に定義ファイルへ書き込むだけならこのようなページが見つかったんですが、
この方法はカスタムセクションには対応していないようです。
app.configのカスタムセクションに、コード上から値を設定する方法があれば教えてください。
https://hilapon.hatenadiary.org/entry/20100625/1277437571
こんなもの見つけましたが、いかがでしょうか
直接、質問には関係ないのですが、App.configは多くの場合でアプリ固有の設定をしておくもので、読み取りのみが主な使い方になるかと思います。(もちろん、書いていけない訳ではないですが)
そのアプリのインストーラーが"C:\Program Files"配下にアプリの実行ファイルと共にApp.configを保存してしまうケースでは、書き込みが行えないかもしれません。
「デバッグ環境ではApp.configに設定を書けて、保存できていた。"C:\Program Files"下にインストールするようなインストーラー込み、製品版を作ったら動かなくなって大騒ぎ!」と言うケースがありがちなので、コメントしたものです。
settings.settings を使わないのには何か理由があるのですか? 単に知らなかったということなら、それを使いましょう。
セクションAのkey1,key2,key3…
セクションBのkey1,key2,key3…
のように複数のセクションを用意してそれぞれに対して同名のキーを設定するような使い方がしたいのですが、settings.settingsでそれは可能ですか?
使い方次第だと思います。例えば、StringCollection を使って、
key1:aaa
key2:bbb
key3:ccc
のようにするとか。
userisgodさん
ありがとうございます。
実現したいこととはかなり近いです。
ただ作成するクラス内に各セクションが保持するkeyと同じだけのプロパティを作る必要があるとなると、今後app.configにkey,valueを増やすたびにクラスの編集も必要となるので、顧客の要件には合わなそうです。
dodox86さん
ありがとうございます。リリースの際には留意するようにいたします。
回答1件
あなたの回答
tips
プレビュー