【问题标题】:How can I load the current web.config/app.config as XML如何将当前的 web.config/app.config 加载为 XML
【发布时间】:2017-02-04 03:33:42
【问题描述】:

我正在尝试使用标准 XmlSerializer 从当前应用程序/webapp 的配置文件中加载自定义部分。

以下解决方案不适用于网络应用:

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

如何在不检查当前应用是否为网络应用的情况下轻松完成此操作?

(不使用System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration?)

【问题讨论】:

    标签: c# .net web-config app-config configuration-files


    【解决方案1】:

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

    var configFilePath =
        AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
    

    根据Sean 的已删除答案https://stackoverflow.com/a/27038942/38368 对不同问题的回答

    【讨论】:

      【解决方案2】:

      另一种使用反射的方法(未经测试):

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

      【讨论】:

        猜你喜欢
        • 2011-01-07
        • 1970-01-01
        • 2014-01-19
        • 2017-04-07
        • 1970-01-01
        • 2011-02-27
        • 2014-10-21
        • 2015-02-24
        • 1970-01-01
        相关资源
        最近更新 更多