加载自定义配置文件


118

我知道我可以使用静态ConfigurationManager.OpenExe(exePath)方法打开与程序集相关的配置文件,但我只想打开与程序集无关的配置。只是一个标准的.NET配置文件。

Answers:


244

瑞奇(Ricky)发表的文章很好,但是很遗憾,它们没有回答您的问题。

要解决您的问题,您应该尝试以下代码:

ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
configMap.ExeConfigFilename = @"d:\test\justAConfigFile.config.whateverYouLikeExtension";
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);

如果需要访问配置中的值,则可以使用索引运算符:

config.AppSettings.Settings["test"].Value;

1
@Oliver通过whateverYouLikeExtension,你的意思是你必须拥有的东西config.
Svish

4
@Oliver现在尝试一下,并且在没有:)的情况下似乎可以正常工作:
Svish

1
我这样做了,但是当我访问ConfigurationManager.ConnectionStrings时,我仍然在获取旧数据。我想念什么?
MAW74656

1
@ MAW74656:您无需访问ConfigurationManager.ConnectionStrings。相反,您必须config从上面的最后一条语句返回的对象中读取值。
奥利弗

3
对于完成此操作后搜索如何获取appSettings的其他任何人:var foo = config.AppSettings.Settings [“ test”]。Value;
罗罗(Roro)

8

配置文件只是一个XML文件,您可以通过以下方式打开它:

private static XmlDocument loadConfigDocument()
{
    XmlDocument doc = null;
    try
    {
        doc = new XmlDocument();
        doc.Load(getConfigFilePath());
        return doc;
    }
    catch (System.IO.FileNotFoundException e)
    {
        throw new Exception("No configuration file found.", e);
    }
    catch (Exception ex)
    {
        return null;
    }
}

然后通过以下方式检索值:

    // retrieve appSettings node

    XmlNode node =  doc.SelectSingleNode("//appSettings");

在之后检测到无法访问的代码throw new Exception("No configuration file found.", e);
奥伊贝克(Oybek)

我将删除return null,它将不会真正到达。
奥塔维奥·德西奥

7
当您从.Net库获得如此出色的类时,为什么要使用XML。我不建议使用这种设计不佳的工具。接下来是什么?实现一个不同的字符串类...考虑这一点。
由纪

@OtávioDécio我可以添加system.diagnostics来启用自定义.config文件中的跟踪吗?
FaizanHussainRabbani '16

@FaizanRabbani不确定自定义跟踪,但是根据msdn.microsoft.com/en-us/library/ms733025(v=vs.110).aspx,您应该能够在配置文件上添加诊断信息。
奥塔维奥·德西奥(OtávioDécio)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.