web-dev-qa-db-ja.com

カスタムセクションでConfigurationManager.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>
9
GibboK

私はあなたが設定セクションを取得し、それにアクセスする必要があると思います:

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>

編集: CodeCasterが彼の回答で述べたようにSingleTagSectionHandlerは内部使用のみです。 NameValueSectionHandlerは、configセクションを定義するための好ましい方法だと思います。

20
Chris Mantle

SingleTagSectionHandlerドキュメントは言う

このAPIは.NET Frameworkインフラストラクチャをサポートし、コードから直接使用するためのものではありません。

here のように、HashTableとして取得し、そのエントリにアクセスできます。

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

string serverUrl = (string)serverTag["url"];
3
CodeCaster
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変数はnullになります。

1
Sam Leach

AppSettingsvalueの代わりに構成sectionを定義しています。 AppSettingsに設定を追加するだけです。

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

カスタム構成セクション は通常、より複雑な構成に使用されます(たとえば、キーごとに複数の値、非文字列値など)。

0
D Stanley