通用 (UWP) 应用中的配置管理器和应用设置

本文关键字:应用 配置管理 管理器 设置 配置 UWP 通用 | 更新日期: 2023-09-27 18:30:24

我想将 API 密钥存储在配置文件中,而不将其签入源代码管理,并在我的 UWP 应用中读取数据。

一个常见的解决方案是将密钥存储在 .config 文件中(例如 app.configweb.config ),并像这样访问它:

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

我正在使用通用 Windows (UWP) 应用程序,无法访问保存ConfigurationManager 的 System.Configuration 命名空间。

如何在 UWP 应用中访问应用设置?或者,在 UWP 应用中访问配置数据的最佳方式是什么?

通用 (UWP) 应用中的配置管理器和应用设置

在我的特定用例中,我需要使用源代码管理未跟踪的外部文件。有两种方法可以从资源或配置文件访问数据。

一种是打开并解析配置文件。给定一个带有构建操作Content sample.txt的文件(复制到输出目录无关紧要),我们可以使用

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);

或者,我们可以使用资源。向项目添加新的资源项,称为 resourcesFile.resw 。要访问数据,请使用:

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

我在博客文章中写了更详细的答案 UWP 中的自定义资源文件

这是一个老问题,但这是我的解决方案:

  • 创建一个分部类 Config.cs(例如)包含您需要的所有属性
  • 添加一个部分方法 void Init()
  • 在构造函数中调用 Init
  • 创建一个另一个文件 Config.partial.cs 使用 void Init() 方法填充所有属性

-> 使用 #if 调试/#else/#endif 从调试/发布切换-> 从 Github 中使用 exclude Config.partial.cs 不将其导入存储库

现在它编译了,它不在存储库中或者,您可以在配置中设置默认(非机密)数据.cs。

配置.cs :

public partial class Config
{
  public Config()
  {
      Init();
  }
  partial void Init();
  public string ApiKey{ get; private set; }= "DefaultValueAPIKEY";
}

配置部分.cs

public partial class Config 
{
  partial void Init()
  {
#if DEBUG
    this.ApiKey = "DebugAPIKEY";
#else
    this.ApiKey = "ReleaseAPIKEY";
#endif
  }
}

我认为您所谓的"ApiKey"是 API 为您提供的用于生成访问令牌的静态密钥。如果是这种情况,也许实现此目的的最佳方法是在源代码管理中创建一个静态类,其中包含该值,如下所示:

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

然后,您可以从代码中轻松访问该值:

var myApiKey = MyCredentials.MyApiKey;

如果要将值存储在纯文本文件中,则必须使用 StorageFileFileIO 类手动写入/读取它。

相反,如果"ApiKey"是指动态访问令牌,那么最好的解决方案是使用ApplicationDataContainer,如stratever所说。

您不需要创建配置文件。UWP 具有用于存储本地设置/配置的内置解决方案。请查看本教程:

https://msdn.microsoft.com/en-us/library/windows/apps/mt299098.aspx

使用ApplicationDataContainer,您将能够按键获取值:

Object value = localSettings.Values["exampleSetting"];