通用 (UWP) 应用中的配置管理器和应用设置
本文关键字:应用 配置管理 管理器 设置 配置 UWP 通用 | 更新日期: 2023-09-27 18:30:24
我想将 API 密钥存储在配置文件中,而不将其签入源代码管理,并在我的 UWP 应用中读取数据。
一个常见的解决方案是将密钥存储在 .config 文件中(例如 app.config
或 web.config
),并像这样访问它:
var apiKey = ConfigurationManager.AppSettings.Get("apiKey");
我正在使用通用 Windows (UWP) 应用程序,无法访问保存ConfigurationManager
的 System.Configuration 命名空间。
如何在 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;
如果要将值存储在纯文本文件中,则必须使用 StorageFile
和 FileIO
类手动写入/读取它。
相反,如果"ApiKey"是指动态访问令牌,那么最好的解决方案是使用ApplicationDataContainer
,如stratever所说。
您不需要创建配置文件。UWP 具有用于存储本地设置/配置的内置解决方案。请查看本教程:
https://msdn.microsoft.com/en-us/library/windows/apps/mt299098.aspx
使用ApplicationDataContainer,您将能够按键获取值:
Object value = localSettings.Values["exampleSetting"];