UWPアプリケーションで静的な設定をファイルに記述する方法

↑オンデマンド?どういう販売形態?注文後に製本するのか?著者の経歴には共感。

UWPアプリケーションで、例えば、システム設定値などを保存するにはどうすればよいのか、また、Webサービスへのアクセストークンなど、Githubなどに上げたくない設定をどう管理すればよいのか?数時間悩んだ結論。

1.PropertiesやApp.config みたいなことをUWPでやりたい

Visual Studio 2015 の WPFアプリケーションでは、設定ファイルを追加することができて、

uwp_settings02

こんな感じで、値をGUIから編集できて、

uwp_settings01

こんな感じで、値をプログラムから利用することができて便利だった。

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の下に、リソースファイルを追加する

uwp_settings03

WPFのプロパティのようにデータ型までは指定できないが、とりあえず、KEYと値のペアをGUIから登録できるようになった。

uwp_settings04

コードからも、リソースファイルの名前を指定して、リソースローダーを生成、KEYを指定して値を取得できた!

var settings = Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView(".passwords");
var tag = settings.GetString("ASSOCIATE_TAG");
Debug.WriteLine(tag);

リソースファイルが存在しないと例外がでるだけなので、このハンドリングをちゃんとしたうえで、リソースファイルを .gitignore に追加すればよさそうだ。

WPFでの、設定ファイルは、便利だったけど、デフォルト値含め、CSファイルに展開されていたかが、リソースファイルは、単なるXMLファイルで、参照時も名称で取得しに行くので、存在しなくてもビルドには影響しないだろう。

まだ、UWPは、WPFにくらべて情報が少ないな、、、

このアルバムはかっこよすぎる。