我正在使用Jeff Atwood的Last Configuration Section Handler You'll Ever Need,但它似乎只适用于默认的app.config文件。如果我想将某些设置分成另一个文件,则反序列化不起作用,因为ConfigurationManager.GetSection只从应用程序的默认app.config文件中读取。是否可以更改默认配置文件的路径或将ConfigurationManager指向第二个配置文件?
答案 0 :(得分:5)
是的,只需将默认配置文件中的部分替换为具有指向另一个文件的configSource =“”属性的同名xml元素......
...在App.config或web.config中......
<configSections>
<section name="Connections"
type="BPA.AMP.Configuration.XmlConfigurator, BPA.AMP.Data.Config.DAL"/>
<section name="AutoProcessConfig"
type="BPA.AMP.Configuration.XmlConfigurator, BPA.AMP.Data.Config.DAL"/>
</configSections>
<Connections configSource="Config\Connections.config" />
<AutoProcessConfig configSource="Config\AutoProcess.config" />
然后是常见的xml; Configurator类
public class XmlConfigurator : IConfigurationSectionHandler
{
public object Create(object parent,
object configContext, XmlNode section)
{
XPathNavigator xPN;
if (section == null || (xPN = section.CreateNavigator()) == null )
return null;
// ---------------------------------------------------------
Type sectionType = Type.GetType((string)xPN.Evaluate
("string(@configType)"));
XmlSerializer xs = new XmlSerializer(sectionType);
return xs.Deserialize(new XmlNodeReader(section));
}
}
答案 1 :(得分:0)
您可以手动执行此操作,方法是将文档作为XDocument打开,找到相应的部分并将其传递给配置部分处理程序。
XDocument configDoc = XDocument.Load( alternateConfigFile );
var section = configDoc.Descendants( "sectionName" ).First();
var obj = sectionHandler.Create( null, null, section );