如何加载当前的web.config/app ?配置为XML
本文关键字:app config 配置 XML web 何加载 加载 | 更新日期: 2023-09-27 18:09:05
我正在尝试使用当前应用/webapp的配置文件中的标准XmlSerializer加载自定义部分。
下面的解决方案不适用于web应用程序:
var configFilePath =
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
.FilePath;
if (configFilePath == null || !File.Exists(configFilePath))
return null;
var xdoc = XDocument.Load(configFilePath);
var section =
xdoc.Root?.Element("ParentSection")?.Element("MySection");
if (section == null)
return null;
var serializer = new XmlSerializer(typeof(MyConfigType));
MyConfigType config;
using (var reader = new StringReader(section.ToString()))
{
config = serializer.Deserialize(reader) as MyConfigType;
}
如何在不检查当前应用程序是否是web应用程序的情况下轻松完成?
(不使用System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration
?)
配置文件路径可以这样解析:
var configFilePath =
AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
基于Sean删除的答案https://stackoverflow.com/a/27038942/38368对另一个问题的答案
另一种使用反射的方法(未经测试的):
// Initialize ConfigurationManager
var dummy = ConfigurationManager.AppSettings;
object configSystem = typeof(ConfigurationManager).GetField("s_configSystem", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null);
object configHost = configSystem.GetType().GetField("_configHost", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(configSystem);
object configPaths = configHost.GetType().GetProperty("ConfigPaths", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(configHost);
string path = (string)configPaths.GetType().GetProperty("ApplicationConfigUri", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(configPaths);