設定ファイルって皆さんどうしてますか?
これまで設定ファイルとは無縁だったり、何ならC#とも無縁だったりで、その辺の事情が分からないこともあり、ちょろっと調べたら何かいっぱい出てきました。こちらのサイトがまとめられていて非常に参考になります。また他にもレジストリを使った方法やConfigurationManagerをつかってApp.configにアクセスする方法があるみたいです。
Properties.Settings
とりあえずPropertiesSettingsを使いました。というのも海外ニキたちのやり取りを見た感じだと、appsettigs.jsonはアプリケーションの固有値で読み出しが主で、PropertiesSettinsはユーザー設定を読み書きするって感じでした。それでもって.NETで依存関係の挿入(DI)で使われるIOptionsも、appsettings.jsonのデータを独自クラスで取り出してくれるのでかなり便利!っと思ったのですが、ファイルは更新できません。だから、やっぱりそういう使い方なんだろうなぁと思ったのです。
user.configは何処に?
順調に動いていてカンペキ!とか思っていたのですがexeを移動すると設定がまっさらになることに気づきました。調べてみると設定ファイルはアセンブリのパスによって決まるらしい。確かにReleaseとDebugで違うなぁと思ってたけど、それはてっきりバイナリの違いかと思っていた。パスで決めるってどうよ。
例えばPCにインストールするタイプの実行ファイルならそれでも十分なんだけど、ちっちゃいユーティリティだと思い付きで配置を変えたりするので向いてない。それに設定ファイルは隠しフォルダにあるから持ってくるのもハードルたかし。
頑張れば保存場所も変更できると分かって少し実装したのですが、「これは本当にする必要があることかね?」ってもう一人のボクに諭された結果別の方法にすることにしました。
Generic Host の Configuration
色々調べているうちにIOptionsを書き換え可能にする方法を見つけまして、日本語だとあまり出てこないけど英語だと何件かあって、nugetパッケージを作ったり使ったりしている人もいるのでやっぱり需要あるよねと思いました。実際のところ設定ファイルを指定すれば独自ファイルを作っているのと同じなので標準化して欲しいなぁと思っています。
設定ファイルはappsettings.jsonじゃない方が良い?
appsettings.jsonを設定ファイルにしない方が良くない?って思った瞬間がありまして、
- Visual Studioの初期設定だとビルドする度にappsettings.jsonが上書きされる
- 配布時の設定ファイルの扱いが難しい
Visual Studioの初期設定だとビルドするたびにappsettings.jsonが上書きされるので設定が残せない。一応、設定を"常にコピーする"ではなく"新しい場合はコピーする"にすれば、大丈夫なんだけど初期値変えちゃうのかぁって思ったりはする。
あと配布時の話っていうのは、初期設定の意味でappsettings.jsonを同梱するようにすると、バージョンのアップデート時にフォルダごと上書きみたいなことをしようとすると、うっかり設定ファイルを上書きしちゃうみたいな事故が起こるからイマイチだなぁと。なので設定ファイルは別ファイルにして固有値はappsettings.jsonって形で使い分けたほうが良さげだなぁって思っています。
コメント
コメントを投稿