通用 (UWP) 应用程序中的 ConfigurationManager 和 AppSettings
ConfigurationManager and AppSettings in universal (UWP) app
我想在配置文件中存储一个 API 密钥而不将其签入源代码管理,并在我的 UWP 应用程序中读取数据。
一个常见的解决方案是将密钥存储在 .config 文件中(例如 app.config
或 web.config
)并像这样访问它:
var apiKey = ConfigurationManager.AppSettings.Get("apiKey");
我正在开发通用 Windows (UWP) 应用程序,但无法访问包含 ConfigurationManager
.
的 System.Configuration 命名空间
如何在 UWP 应用程序中访问 AppSettings?
或者,在 UWP 应用中访问配置数据的最佳方式是什么?
您不需要创建配置文件。 UWP 有一个 built-in 存储本地 settings/configurations 的解决方案。请查看本教程:
https://msdn.microsoft.com/en-us/library/windows/apps/mt299098.aspx
使用 ApplicationDataContainer,您将能够通过键获取一个值:
Object value = localSettings.Values["exampleSetting"];
我认为你所说的 "ApiKey" 是 API 给你生成访问令牌的静态密钥。如果是这种情况,也许实现此目的的最佳方法是在源代码管理之外创建一个静态 class,其中包含该值,如下所示:
public static class MyCredentials
{
public static string MyApiKey = "apiKey";
}
然后您可以从您的代码轻松访问该值:
var myApiKey = MyCredentials.MyApiKey;
如果您想将值存储在 plain-text 文件中,您将不得不使用 StorageFile
和 FileIO
classes 手动 write/read 它。
相反,如果 "ApiKey" 表示动态访问令牌,那么最好的解决方案是使用 ApplicationDataContainer
,如 stratever 所说。
在我的特定用例中,我需要使用源代码管理未跟踪的外部文件。有两种方法可以从资源文件或配置文件中访问数据。
一是打开并解析一个配置文件。给定一个带有 Build Action 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");
我在博客里写了更详细的回答postCustom resource files in UWP
这是一个老问题,但这里是我的解决方案:
- 使用您需要的所有属性创建部分 class Config.cs(例如)
- 添加分部方法void Init()
- 在构造函数中调用Init
- 创建另一个文件 Config.partial.cs 使用 void Init() 方法填充您的所有属性
-> 使用#if DEBUG / #else / #endif 从 Debug/Release 切换
-> 使用 exclude Config.partial.cs from Github 不将其导入存储库
现在它可以编译并且不在存储库中
或者,您可以设置 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
}
}
我想在配置文件中存储一个 API 密钥而不将其签入源代码管理,并在我的 UWP 应用程序中读取数据。
一个常见的解决方案是将密钥存储在 .config 文件中(例如 app.config
或 web.config
)并像这样访问它:
var apiKey = ConfigurationManager.AppSettings.Get("apiKey");
我正在开发通用 Windows (UWP) 应用程序,但无法访问包含 ConfigurationManager
.
如何在 UWP 应用程序中访问 AppSettings? 或者,在 UWP 应用中访问配置数据的最佳方式是什么?
您不需要创建配置文件。 UWP 有一个 built-in 存储本地 settings/configurations 的解决方案。请查看本教程:
https://msdn.microsoft.com/en-us/library/windows/apps/mt299098.aspx
使用 ApplicationDataContainer,您将能够通过键获取一个值:
Object value = localSettings.Values["exampleSetting"];
我认为你所说的 "ApiKey" 是 API 给你生成访问令牌的静态密钥。如果是这种情况,也许实现此目的的最佳方法是在源代码管理之外创建一个静态 class,其中包含该值,如下所示:
public static class MyCredentials
{
public static string MyApiKey = "apiKey";
}
然后您可以从您的代码轻松访问该值:
var myApiKey = MyCredentials.MyApiKey;
如果您想将值存储在 plain-text 文件中,您将不得不使用 StorageFile
和 FileIO
classes 手动 write/read 它。
相反,如果 "ApiKey" 表示动态访问令牌,那么最好的解决方案是使用 ApplicationDataContainer
,如 stratever 所说。
在我的特定用例中,我需要使用源代码管理未跟踪的外部文件。有两种方法可以从资源文件或配置文件中访问数据。
一是打开并解析一个配置文件。给定一个带有 Build Action 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");
我在博客里写了更详细的回答postCustom resource files in UWP
这是一个老问题,但这里是我的解决方案:
- 使用您需要的所有属性创建部分 class Config.cs(例如)
- 添加分部方法void Init()
- 在构造函数中调用Init
- 创建另一个文件 Config.partial.cs 使用 void Init() 方法填充您的所有属性
-> 使用#if DEBUG / #else / #endif 从 Debug/Release 切换 -> 使用 exclude Config.partial.cs from Github 不将其导入存储库
现在它可以编译并且不在存储库中 或者,您可以设置 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
}
}