サーチ…


.NET 1.xのConfigurationSettingsからのAppSettings

廃止された使用法

ConfigurationSettingsクラスは、.NET 1.0および1.1のアセンブリの設定を取得する元の方法でした。これは、 ConfigurationManagerクラスとWebConfigurationManagerクラスによって置き換えられました。

設定ファイルのappSettingsセクションに同じ名前のキーが2つある場合は、最後のものが使用されます。

app.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="keyName" value="anything, as a string"/>
    <add key="keyNames" value="123"/>
    <add key="keyNames" value="234"/>
  </appSettings>
</configuration>

Program.cs

using System;
using System.Configuration;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            string keyValue = ConfigurationSettings.AppSettings["keyName"];
            Debug.Assert("anything, as a string".Equals(keyValue));

            string twoKeys = ConfigurationSettings.AppSettings["keyNames"];
            Debug.Assert("234".Equals(twoKeys));

            Console.ReadKey();
        }
    }
}

.NET 2.0以降でConfigurationManagerからAppSettingsを読み込む

ConfigurationManagerクラスはAppSettingsプロパティをサポートしてAppSettingsます。これにより、.NET 1.xと同じ方法で設定ファイルのappSettingsセクションから設定を読み続けることができます。

app.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="keyName" value="anything, as a string"/>
    <add key="keyNames" value="123"/>
    <add key="keyNames" value="234"/>
  </appSettings>
</configuration>

Program.cs

using System;
using System.Configuration;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            string keyValue = ConfigurationManager.AppSettings["keyName"];
            Debug.Assert("anything, as a string".Equals(keyValue));

            var twoKeys = ConfigurationManager.AppSettings["keyNames"];
            Debug.Assert("234".Equals(twoKeys));

            Console.ReadKey();
        }
    }
}

Visual Studioの強力な型付けされたアプリケーションとユーザー設定のサポートの概要

Visual Studioでは、ユーザーとアプリケーションの設定を管理できます。この方法を使用すると、設定ファイルのappSettingsセクションを使用することに比べて、これらの利点が得られます。

  1. 設定を強く入力することができます。シリアル化できるタイプは、設定値として使用できます。

  2. アプリケーションの設定は、ユーザー設定から簡単に切り離すことができます。 :アプリケーション設定は、単一の構成ファイルに保存されているweb.configのWebサイトやWebアプリケーションのための、およびapp.configを、 組立 .exe.configと改称、 アセンブリが実行可能ファイルの名前です。ユーザー設定(Webプロジェクトでは使用されません)は、ユーザーのApplication Dataフォルダ(オペレーティングシステムのバージョンによって異なります)のuser.configファイルに格納されます。

  3. 各クラスライブラリには独自のカスタム設定セクションがあるので、クラスライブラリのアプリケーション設定を名前の衝突の危険なしに単一の構成ファイルにまとめることができます。

ほとんどのプロジェクトタイプでは、 プロジェクトプロパティデザイナには、カスタムアプリケーションとユーザー設定を作成するための開始点である[設定 ]タブがあります。初期設定では、[設定]タブは空白になり、デフォルトの設定ファイルを作成するためのリンクが1つ表示されます。リンクをクリックすると、次の変更が行われます。

  1. プロジェクト用の構成ファイル( app.configまたはweb.config )が存在しない場合は、そのファイルが作成されます。

  2. [設定]タブは、個々の設定エントリの作成、編集、および削除を可能にするグリッドコントロールに置き換えられます。

  3. ソリューションエクスプローラで、プロパティの特別なフォルダの下にSettings.settingsアイテムが追加されます。この項目を開くと、[設定]タブが開きます。

  4. 新しい部分クラスを含む新しいファイルがプロジェクトフォルダのPropertiesフォルダに追加されます。この新しいファイルの名前はSettings.Designer.__ (.cs、.vbなど)で、クラスの名前はSettingsです。クラスはコード生成されているので編集する必要はありませんが、クラスは部分クラスであるため、追加のメンバーを別のファイルに入れてクラスを拡張できます。さらに、このクラスは、プロパティの名前でシングルトンインスタンスを露出させ、Singletonパターンを使用して実装されるDefault

新しい各エントリを[設定]タブに追加すると、Visual Studioは次の2つのことを行います。

  1. Settingsクラスによって管理されるように設計されたカスタム構成セクションで、設定ファイルに設定を保存します。

  2. Settingsクラスで新しいメンバーを作成し、[設定]タブで選択した特定のタイプの設定を読み書きして表示します。

厳密に型付けされた設定を設定ファイルのカスタムセクションから読み込む

新しいSettingsクラスとカスタム設定セクションから開始:

プロジェクトプロパティデザイナの[設定]タブ

ExampleTimeoutという名前のアプリケーション設定をtime System.Timespanを使用して追加し、値を1分に設定します。

設定タブでExampleTimeoutアプリケーション設定を追加する

[設定]タブのエントリを保存し、カスタム設定クラスを再生成し、プロジェクト構成ファイルを更新するプロジェクトプロパティを保存します。

コード(C#)の設定を使用します。

Program.cs

using System;
using System.Diagnostics;
using ConsoleApplication1.Properties;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            TimeSpan exampleTimeout = Settings.Default.ExampleTimeout;
            Debug.Assert(TimeSpan.FromMinutes(1).Equals(exampleTimeout));

            Console.ReadKey();
        }
    }
}

カバーの下に

プロジェクト設定ファイルを見て、アプリケーション設定エントリがどのように作成されているかを確認します。

app.config (Visual Studioにより自動的に更新されます)

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
      <section name="ConsoleApplication1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <appSettings />
  <applicationSettings>
    <ConsoleApplication1.Properties.Settings>
      <setting name="ExampleTimeout" serializeAs="String">
        <value>00:01:00</value>
      </setting>
    </ConsoleApplication1.Properties.Settings>
  </applicationSettings>
</configuration>

appSettingsセクションは使用されないことに注意してください。 applicationSettingsセクションには、各エントリのsetting要素を持つカスタム名前空間修飾セクションが含まれています。値のタイプは設定ファイルには格納されません。これはSettingsクラスのみがSettingsます。

Settingsクラスを見て、このカスタムセクションを読むためにConfigurationManagerクラスをどのように使用するかを確認してください。

Settings.designer.cs (C#プロジェクトの場合)

...
    [global::System.Configuration.ApplicationScopedSettingAttribute()]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Configuration.DefaultSettingValueAttribute("00:01:00")]
    public global::System.TimeSpan ExampleTimeout {
        get {
            return ((global::System.TimeSpan)(this["ExampleTimeout"]));
        }
    }
...

DefaultSettingValueAttributeは、プロジェクトプロパティデザイナの[設定]タブに入力された値を格納するために作成されたことに注意してください。エントリが構成ファイルにない場合、代わりにこのデフォルト値が使用されます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow