这是我的场景我需要加载一个不同的app.config文件,其中包含我对log4net的设置。在我的项目中,我创建了一个继承自IConfigurationReader的类。对于Methode getSection,我加载配置文件并返回该部分。
我可以看到它正在加载配置文件和部分,但它没有将它转换为我在配置文件中定义的类型。
<common>
<logging>
<factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net4">
<arg key="configType" value="FILE-WATCH"/>
<arg key="configFile" value="C:\Users\dwarner\Documents\Visual Studio 2012\Projects\ConsoleApplication2\ConsoleApplication2\Config\log4net.config" />
</factoryAdapter>
</logging>
我可以看到它加载原始XML但我不知道为什么它不会创建我的Factory Adapter。我在配置中尝试了完全限定的名称,没有运气。
感谢您的帮助
答案 0 :(得分:1)
只要在LogManager上设置ConfigurationReader并将适配器置空,以便重新加载配置设置就可以了。您还需要确保您的IConfigurationReader加载该部分,因为它自己的DocumentElement:
public class CustomAppConfigurationReader : IConfigurationReader
{
public object GetSection(string sectionName)
{
var handler = new ConfigurationSectionHandler();
var xml = LoadConfigData().GetSection(sectionName).SectionInformation.GetRawXml();
var doc = new XmlDocument();
doc.LoadXml(xml);
return handler.Create(null, null, doc.DocumentElement);
}
/// <summary>
/// Load configuration data from custom configuration file.
/// </summary>
public static Configuration LoadConfigData()
{
var filePath = "C:\\SomeOtheApp.config";
var map = new ExeConfigurationFileMap {ExeConfigFilename = filePath};
var config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
return config;
}
}