可能重复:
Using ConfigurationManager to load config from an arbitrary location
我花了几个小时的时间偷偷看看C#框架类来解决这个问题。关于如何做到这一点有几个问题,但没有明确的答案。我能找到的最好的链接是C# DLL config file,它完全涵盖了我的用例,一个.dll从全局.config文件读取,无论托管它的是哪个进程。
您可以使用反射来创建处理程序对象,但它会降低可读性,这不是生产代码,只是一个片段来展示它是如何工作的。我保持尽可能简单明了。
public class ConfigurationManager
{
public static object GetSection(string sectionName)
{
var configuration = System.Configuration.ConfigurationManager.OpenMappedMachineConfiguration(
new System.Configuration.ConfigurationFileMap(
@"X:\path\to\your\file.config"));
object retVal;
var section = configuration.GetSection(sectionName);
var xmlDoc = new System.Xml.XmlDocument();
xmlDoc.LoadXml(section.SectionInformation.GetRawXml());
if (section.SectionInformation.Type.Equals("System.Configuration.NameValueSectionHandler"))
{
var handler = new System.Configuration.NameValueSectionHandler();
retVal = handler.Create(null, null, xmlDoc.DocumentElement);
}
else if (section.SectionInformation.Type.Equals("System.Configuration.DictionarySectionHandler"))
{
var handler = new System.Configuration.DictionarySectionHandler();
retVal = handler.Create(null, null, xmlDoc.DocumentElement);
}
else
{
throw new System.Exception("Unknown type " + section.SectionInformation.Type);
}
return retVal;
}
}