使用 ConfigurationManager 将用户值存储在与应用配置不同的文件中
Posted
技术标签:
【中文标题】使用 ConfigurationManager 将用户值存储在与应用配置不同的文件中【英文标题】:use ConfigurationManager to store user values in a file that is separate from the app config 【发布时间】:2011-11-23 06:08:25 【问题描述】:好吧,我已经放弃了。
我希望能够使用用户配置文件记录用户首选项,该文件将从应用程序配置文件中引用。我正在尝试使用ConfigurationManager
和一个应用程序配置文件来做到这一点。我可以从用户设置中很好地阅读,但设置它们是另一个问题。我想将应用程序设置与两个不同文件中的用户设置分开。
当我使用这个时:
<appSettings file="user.config">
</appSettings>
user.config 看起来像:
<?xml version="1.0" encoding="utf-8" ?>
<appSettings>
<add key="localSetting" value="localVal"/>
</appSettings>
我可以使用 ConfigurationManager 读取本地设置,但不能保存到文件中。
var oldLocVal = ConfigurationManager.AppSettings["localSetting"];
ConfigurationManager.AppSettings.Set("localSetting", "newLocalValue"); // Doesn't save to file.
如果相反,我的 user.config 文件是:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="localSetting" value="localVal"/>
</appSettings>
</configuration>
然后我想以这种方式调用并保存 AppSettings:
var uMap = new ConfigurationFileMap("user.config");
var uConfig = ConfigurationManager.OpenMappedMachineConfiguration(uMap);
var oldLocalVarFromConfig = uConfig.AppSettings.Settings["localSetting"]; // NO
uConfig.AppSettings.Settings.Remove("localSetting"); // NO
uConfig.AppSettings.Settings.Add("localSetting", "newValue");
uConfig.Save();
但它不允许我访问配置的应用设置。 (将某些内容转换为 AppSettings 时出现问题)
我还尝试在应用程序配置
appSettings
元素中使用 configSource
而不是 file
属性。
我使用examples here 寻求帮助,但不幸的是这还不够。
提前致谢。
【问题讨论】:
【参考方案1】:值得称赞的是,this code here works。
另外,我制作了一个简单的 XML 可序列化对象,它可以在任何时候调用 Save 时将自身保存到磁盘。
【讨论】:
【参考方案2】:您可以将外部配置文件加载到“配置”实例中。这是一个带有使用此策略的静态构造函数的单例类的示例。我想你可以稍微调整一下来做你想做的事。
private const string _path = @"E:\WhateverPath\User.config"
static ConfigManager()
ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap()
ExeConfigFilename = _path
;
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);
// get some custom configuration section
_someConfigSection = config.GetSection("SomeSection") as SomeSection;
// or just get app settings
_appSettingSection = config.AppSettings;
也许尝试以这种方式添加,确保调用 Save()
_appSettingSection.Settings.Add("SomeKey", "SomeValue");
//make sure to call save
config.Save();
【讨论】:
太好了,显然我尝试过 OpenExeConfiguration 和 OpenMappedMachineConfiguration,但这是可行的。以上是关于使用 ConfigurationManager 将用户值存储在与应用配置不同的文件中的主要内容,如果未能解决你的问题,请参考以下文章
ConfigurationManager.AppSettings性能问题
使用 ConfigurationManager 从任意位置加载配置
在类库的 App.config 中使用 ConfigurationManager.GetSection
建议在 .NET 核心中使用 app.config 和 ConfigurationManager 吗?
如何在类库项目类型中使用 ConfigurationManager 类
如何使用ConfigurationManager? (Microsoft.IdentityModel.Protocols)