UWPアプリケーションで静的な設定をファイルに記述する方法
↑オンデマンド?どういう販売形態?注文後に製本するのか?著者の経歴には共感。
UWPアプリケーションで、例えば、システム設定値などを保存するにはどうすればよいのか、また、Webサービスへのアクセストークンなど、Githubなどに上げたくない設定をどう管理すればよいのか?数時間悩んだ結論。
1.PropertiesやApp.config みたいなことをUWPでやりたい
Visual Studio 2015 の WPFアプリケーションでは、設定ファイルを追加することができて、
こんな感じで、値をGUIから編集できて、
こんな感じで、値をプログラムから利用することができて便利だった。
int sleep = Properties.Settings.Default.AccessSleepMilliSeconds;
2.UWPではできなさそう
上記のように、Propertiesが、自動生成されるような機能は VisualStudion2017 + UWP プロジェクトではできなさそうだ。。。
アプリケーションの設定自体については、以下に詳しい
https://docs.microsoft.com/ja-jp/windows/uwp/app-settings/store-and-retrieve-app-data
が、やりたいこととはちょっと違う、ConfigurationManager も UWPでは使えなさそうだ。。。
3.設定ファイル + 自作
うーん、上のリンクにある方法で、設定ファイルを読み込み辞書を作るコードを書くか!?
https://docs.microsoft.com/en-us/windows/uwp/files/quickstart-reading-and-writing-files
var uri = new System.Uri("ms-appx:///Assets/.password.txt"); var file = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(uri); string text = await Windows.Storage.FileIO.ReadTextAsync(file); System.Diagnostics.Debug.WriteLine(text);
とりあえず、Assetsフォルダに配置した.password.txt ファイルは読みだすことができる。
4.リソースファイルを利用する
と思っていたのだが、上記Stackoverflow に回答されている、以下のサイトのやり方がよさそう。
http://amadeusw.com/iot/custom-resource-files-in-uwp-windows-10
4.1 リソースファイルの追加
WPFの時に合わせて、Propertiesの下に、リソースファイルを追加する
WPFのプロパティのようにデータ型までは指定できないが、とりあえず、KEYと値のペアをGUIから登録できるようになった。
コードからも、リソースファイルの名前を指定して、リソースローダーを生成、KEYを指定して値を取得できた!
var settings = Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView(".passwords"); var tag = settings.GetString("ASSOCIATE_TAG"); Debug.WriteLine(tag);
リソースファイルが存在しないと例外がでるだけなので、このハンドリングをちゃんとしたうえで、リソースファイルを .gitignore に追加すればよさそうだ。
WPFでの、設定ファイルは、便利だったけど、デフォルト値含め、CSファイルに展開されていたかが、リソースファイルは、単なるXMLファイルで、参照時も名称で取得しに行くので、存在しなくてもビルドには影響しないだろう。
まだ、UWPは、WPFにくらべて情報が少ないな、、、
このアルバムはかっこよすぎる。