web-dev-qa-db-ja.com

ユニバーサル(UWP)アプリのConfigurationManagerとAppSettings

APIキーをソース管理にチェックインせずに構成ファイルに保存し、UWPアプリのデータを読み取りたいと思います。

一般的な解決策は、キーを.configファイルに保存することです(app.configまたはweb.config)次のようにアクセスします。

var apiKey = ConfigurationManager.AppSettings.Get("apiKey");

私はユニバーサルWindows(UWP)アプリで作業していますが、ConfigurationManagerを保持するSystem.Configuration名前空間にアクセスできません。

UWPアプリでAppSettingsにアクセスするにはどうすればよいですか?または、UWPアプリで構成データにアクセスする最良の方法は何ですか?

21

特定のユースケースでは、ソース管理によって追跡されない外部ファイルを使用する必要がありました。リソースまたは構成ファイルからデータにアクセスするには、2つの方法があります。

1つは、構成ファイルを開いて解析することです。与えられたファイルsample.txtBuild ActionContent出力ディレクトリにコピーは重要ではありません)、私たちはそれを読むことができます

var uri = new System.Uri("ms-appx:///sample.txt");
var sampleFile = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(uri);

または

var packageFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
var sampleFile = await packageFolder.GetFileAsync("sample.txt");

に続く

var contents = await Windows.Storage.FileIO.ReadTextAsync(sampleFile);

または、Resourcesを使用できます。 resourcesFile.reswという新しいリソースアイテムをプロジェクトに追加します。データにアクセスするには、次を使用します。

var resources = new Windows.ApplicationModel.Resources.ResourceLoader("resourcesFile");
var token = resources.GetString("secret");

ブログの投稿でより詳細な回答を書きました WPのカスタムリソースファイル

15

「ApiKey」と呼ぶものは、APIがアクセストークンを生成するために提供する静的キーであると考えています。この場合、おそらくこれを達成するための最良の方法は、ソースコントロールから、その値を含む静的クラスを作成することです。

public static class MyCredentials
{
    public static string MyApiKey = "apiKey";
}

次に、コードからその値に簡単にアクセスします。

var myApiKey = MyCredentials.MyApiKey;

代わりにプレーンテキストファイルに値を保存する場合は、StorageFileおよびFileIOクラスを使用して手動で値を読み書きする必要があります。

代わりに、「ApiKey」がダイナミックアクセストークンを意味する場合、最適なソリューションはストラテバーが言うようにApplicationDataContainerを使用することです。

0

それは古い質問ですが、ここで私の解決策:

  • 必要なすべてのプロパティを使用して、部分クラスConfig.cs(たとえば)を作成します
  • 部分メソッドvoid Init()を追加します
  • コンストラクターでInitを呼び出す
  • すべてのプロパティを埋めるvoid Init()メソッドを使用して、他のファイルConfig.partial.csを作成します

-> #if DEBUG/#else/#endifを使用してデバッグ/リリースから切り替え-> Githubからexclude Config.partial.csを使用してリポジトリにインポートしない

コンパイルされてリポジトリにないようになりました。また、Config.csのデフォルト(シークレットではない)データに設定することもできます。

Config.cs:

public partial class Config
{

  public Config()
  {
      Init();
  }

  partial void Init();

  public string ApiKey{ get; private set; }= "DefaultValueAPIKEY";
}

Config.partial.cs

public partial class Config 
{

  partial void Init()
  {
#if DEBUG

    this.ApiKey = "DebugAPIKEY";

#else

    this.ApiKey = "ReleaseAPIKEY";

#endif
  }
}
0
Dadv