【问题标题】:How do I save a configuration file with a custom configuration section?如何使用自定义配置部分保存配置文件?
【发布时间】:2020-02-05 20:46:02
【问题描述】:

我有一个应用程序在运行时需要将自定义部分插入到它的 app/web.config 中。通常这可以通过以下方式完成:

var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var mySection = new MyCustomSection { SomeProperty="foo" };

config.Sections.Add("mySection", mySection);
section.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Full);

我在这里遇到的问题是我添加到配置文件的部分需要它自己的序列化处理程序。我知道这可以通过简单地创建 IConfigurationSectionHandler 的实现读取配置轻松处理,但我似乎无法找到真正写入配置部分本身的方法.

查看MSDN 文档,ConfigurationSection 类确实有一个 SerializeSection/DeserializeSection 方法,但它们被标记为内部并且不能被覆盖。我还在 SectionInformation 中找到了一个 GetRawXml/SetRawXml 方法,但它们被标记为不应由用户代码直接调用的基础架构级调用。

我正在尝试做的事情是否可能?这似乎是一个非常简单的用例。

谢谢。

【问题讨论】:

  • 将更改的设置存储在数据库中不是更有益吗?由于对 web 配置的更改会强制在 iis 中重建
  • 通常会,是的。我在这里尝试的是是否可以加载 app.config,对其进行修改,然后以不同的名称重新保存它;本质上为该配置创建“配置文件”。例如:myapp.exe.config 以及 myapp.user1.config、myapp.user2.config 等...
  • 但如果你这样做了,它们将在 web.config 加载之前不可用。这是预期的功能吗?
  • 这是有意的。这是我正在尝试的实验性设计,但基本上我想做的是启动应用程序,然后根据命令行上给出的“配置文件”,它将加载特定的 app.config 并使用它来驱动应用程序.

标签: c# .net configurationmanager


【解决方案1】:

这是System.Configuration.Configuration 类的保存方法。

System.Configuration.Configuration configRoot = null;
if(HttpContext.Current!=null)
    configRoot = WebConfigurationManager.OpenWebConfiguration(_urlRoot);
else
   configRoot = ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.PerUserRoamingAndLocal);

ConfigurationSectionGroup configGroup = configRoot.GetSectionGroup("mySections");
foreach (ConfigurationSection configSection in configGroup.Sections)
{
    //Do some updating that needs to be saved.
}
configRoot.Save();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-31
    • 2014-02-14
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多