C# 如何使用自定义配置节保存配置文件?

C# 如何使用自定义配置节保存配置文件?,c#,.net,configurationmanager,C#,.net,Configurationmanager,我有一个应用程序,在运行时需要在其app/web.config中插入一个自定义节。通常,这可以通过以下方式实现: var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); var mySection = new MyCustomSection { SomeProperty="foo" }; config.Sections.Add("mySection", mySection); se

我有一个应用程序,在运行时需要在其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的一个实现,就可以轻松地处理这个问题,但我似乎找不到一种方法来实际编写配置部分本身

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

我想做的事可能吗?这似乎是一个非常直接的用例


谢谢。

这里有一个在
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();

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