如何将ConfigurationManager.AppSettings与自定义部分一起使用?

时间:2013-11-25 14:10:05

标签: c# .net wpf appsettings

我需要使用App.config文件获取“http://example.com”。

但目前我正在使用:

string peopleXMLPath = ConfigurationManager.AppSettings["server"];

我无法获得价值。

你能指出我做错了吗?

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <configSections>
    <section name="device" type="System.Configuration.SingleTagSectionHandler" />
    <section name="server" type="System.Configuration.SingleTagSectionHandler" />
  </configSections>
  <device id="1" description="petras room" location="" mall="" />
  <server url="http://example.com" />
</configuration>

5 个答案:

答案 0 :(得分:19)

我认为您需要获取配置部分,并访问:

var section = ConfigurationManager.GetSection("server") as NameValueCollection;
var value = section["url"];

您还需要更新配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <configSections>
    <section name="device" type="System.Configuration.NameValueSectionHandler" />
    <section name="server" type="System.Configuration.NameValueSectionHandler" />
  </configSections>
  <device>
    <add key="id" value="1" />
    <add key="description" value="petras room" />
    <add key="location" value="" />
    <add key="mall" value="" />
  </device>
  <server>
    <add key="url" value="http://example.com" />
  </server>
</configuration>

修改:As CodeCaster mentioned in his answerSingleTagSectionHandler仅供内部使用。我认为NameValueSectionHandler是定义配置节的首选方式。

答案 1 :(得分:3)

SingleTagSectionHandler documentation says

  

此API支持.NET Framework基础结构,不能直接在您的代码中使用。

如图here所示,您可以将其检索为HashTable并访问其条目:

Hashtable serverTag = (Hashtable)ConfigurationManager.GetSection("server");

string serverUrl = (string)serverTag["url"];

答案 2 :(得分:1)

string peopleXMLPath = ConfigurationManager.AppSettings["server"];

从app.config文件的appSettings部分获取值,但是您将值存储在

<server url="http://example.com" />

将值放在appSettings部分中,如下所示,或从当前位置检索值。

您需要在配置的appSettings部分添加一个键值对。如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="server" value="http://example.com" />
    </appSettings>
</configuration>

您的阅读代码是正确的,但您应该检查是否为null。如果代码无法读取配置值,则string变量将为空。

答案 3 :(得分:0)

您正在AppSettings中定义配置部分而不是。您只需将设置添加到AppSettings

即可
<appSettings>
      ... may be some settings here already
      <add key="server" value="http://example.com" />
</appSettings>

Custom config sections通常用于更复杂的配置(例如,每个键的多个值,非字符串值等等。

答案 4 :(得分:-1)

如果您想从应用设置中获取值,配置文件中的appsetting元素必须具有密钥。

定义您的服务器值,如下面配置部分所述:

<configuration>
    <appSettings>
          <add key="server" value="http://example.com" />
    </appSettings>
    ...
    ...
    ...
</configuration>

现在执行以下代码行来获取服务器URL:

string peopleXMLPath = ConfigurationManager.AppSettings["server"].ToString();