2021年4月16日金曜日

【C#】app.configに設定値を書いて使用する

C#を最近私的にやってますが、
仕事の方でもちょいちょい使うので、覚書として。

ツールとかアプリケーションを作成するときに、
アプリケーションの設定値とか、どっかに格納しておきたいこととかあると思います。
C#だとその時にapp.config使えばいいよね、ってなるんですが、
やり方を毎回調べてやってて、今回もやっぱり覚えてなかったんで、
そんなんなら、自分のとこに書いておいて、それ見ようということです。

Resourceファイルの時と大体同じですかね~。
プロジェクト新しく作った時に大体セットでGoogle検索してますからね。




app.configの中身

フォームアプリケーションを作成した直後は下記の様になっていました。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
</configuration>

.net frameworkのバージョンだけ記載されている感じですね。
ここに、アプリケーション独自の設定値を書いていく感じになります。

空プロジェクトなどから追加する場合は、
「追加>Visual C#アイテム>アプリケーション構成ファイル」
から追加できます。


このアプリケーションの独自設定を追記する

とりあえず、こういう構成のファイルですよってのが分かったので、
ここにこのアプリケーションの設定を追記していきます。

下記のような感じで追加してみます。
赤部分が、追加した部分ですね。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
    <appSettings>
        <add key="exec_mode" value="admin" />
        <add key="debug_mode" value="0" />
    </appSettings>
</configuration>

「exec_mode」という名前に「admin」という値を、
「debug_mode」という名前に「0」を、それぞれ設定した感じですね。
あとは、プログラムの方でこの設定値を取得することができればよさそうです。


プログラムからapp.configの内容を取得する

使用する側のプログラムでは、以下の手順が必要になります。

「参照の追加>アセンブリ、フレームワーク」から
「System.Configuration」を追加します。


まずこれをしないと、以下のプログラムがエラー吐いたりして
にっちもさっちもいきません。
毎回この辺を調べながらやってるんだよね。

次にプログラムです!

プログラムの頭にはusing書いておきましょう。

using System.Configuration;

値をとってくる場合は
「System.Configuration.ConfigurationManager.AppSettings」
を使用します。
大体、こんな感じで記述します。

string exec_mode = System.Configuration.ConfigurationManager.AppSettings[ "exec_mode" ];
int debug_mode = int.Parse(
    System.Configuration.ConfigurationManager.AppSettings[ "debug_mode" ] 
    );
アプリケーション初期化処理のあたりでこうして書いておくと、
exec_mode、debug_modeにそれぞれapp.configから読み込んだ値を
セットしてくれます。
取得する際はstring型で返ってくるので、適宜Parseなりなんなりで変換します。


これはどういうときに役に立つ?

Resourceファイルの時と大体同じになりますが、
設定値とかを外側に出しておくことで、
アプリケーションの使いやすさが大分変わってきます。

Resourceファイルの多言語対応の時もそうでしたが、
何か共通する設定値をプログラム内に直に書いてしまうと、
大体よくないことが起きるんですね。

頭に定義しておいて、それを使うならまだマシですが、
コード内に直に何百箇所と書かれていたりすると、ヒサンですね。
動作モードを1から2に変更します~なんてときに、置き換えが発生して、
たいてい、数か所置き換えミスをして、事件が発生するんですね~。
(経験あり)

プログラム内で設定されていると、
変更を適用するのにアプリケーションのビルドが発生します。
これも、開発環境がない人(非開発者)に渡す際に面倒が発生します。

こういったときに、app.configで設定値を読み取る形にしておけば、
app.configの値をテキストエディタとかで変更するだけで、
アプリケーションの動作モード「debug_mode」、
例えば「「0」の時は通常モード、「255」の時はデバッグモードで動作」
というような分岐をさせることが可能になります。

まあ、得てして、それ用にプログラムの流れは組む必要があるんですが、
再ビルドしなくても融通の利く作りにできるので、便利な仕組みです。
ツールアプリケーションとか作成する際にちょくちょく使うので、
覚えておいて損はない。

そんな感じで、以上です。

0 件のコメント:

コメントを投稿