如何加载当前的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 ?)

如何加载当前的web.config/app ?配置为XML

配置文件路径可以这样解析:

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);