3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(.Net)スコープがアプリケーションになっているapp.configの設定プロパティに値を入れる方法

(.Net)アプリケーションの設定ファイルを作ろうとしたけど。。。の補足です。

上記リンク先にあるようにスコープをアプリケーションにしているとアプリケーション構成ファイルに設定値を保存することはできません。

しかし、アプリケーション構成ファイルから読み込んだプロパティには値を入れることができます。

参考にさせてもらったのはスコープがアプリケーションな接続文字列を動的に変更する方法(テスト系データベースと本番系データベースを動的に切り替える方法)です。

確かに、ここにあるように、スコープがアプリケーションになっているプロパティは、セッターがないだけなので、それを partial class で実装してやればいけました。

コードはこんな感じです。(設定項目DataPathのスコープはアプリケーション)

//■Settings.Designer.cs ファイル。 VSが勝手に作るファイル。ここは手で直すとダメ!

[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]

internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {

...省略

[global::System.Configuration.UserScopedSettingAttribute()]

[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

[global::System.Configuration.DefaultSettingValueAttribute("")]

public string DataPath {

get {

return ((string)(this["DataPath"]));

}

set {

this["DataPath"] = value;

}

}

}

 

 

//■Settings2.csファイル。Settingsのpartialクラス。ここでSettingsクラスのメンバ変数に無理やり値を書き込む。

internal partial class Settings : global::System.Configuration.ApplicationSettingsBase

{

//無理やり設定項目のメンバ変数に値入れる

public string Set_DataPath

{

set

{

this["DataPath"] = value;

}

}

}

で、試しに下記の保存メソッド読んでみたんですが、やっぱり無理やりプロパティにセットした値はアプリケーション構成ファイルには保存されないんですね。。

//アプリケーションの設定を保存する

Properties.Settings.Default.Save();