172

.NET Windowsフォームアプリケーションを開発する場合App.config、構成値を格納するためにこれらのタグから選択できます。どちらがいいですか?

<configuration>

  <!-- Choice 1 -->
  <appSettings>
    <add key="RequestTimeoutInMilliseconds" value="10000"/>
  </appSettings>

  <!-- Choice 2 -->
  <configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5612342342" >
        <section name="Project1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5612342342" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <applicationSettings>
    <Project1.Properties.Settings>
      <setting name="TABLEA" serializeAs="String">
        <value>TABLEA</value>
      </setting>
    </Project1.Properties.Settings>
  </applicationSettings>

</configuration>
4

6 に答える 6

155

基本<appSettings>は扱いが簡単です -<add key="...." value="..." />エントリを平手打ちするだけで完了です。

欠点は、タイプチェックがないことです。たとえば、構成したい番号が実際にあると安全に想定することはできません-誰かがその設定に文字列を入れることができますConfigurationManager["(key)"]....あなたが何を扱っているかを知るためにあなたに。

また、時間の経過とともに、<appSettings>アプリの多くの部分がそこに何かを入れ始めると、かなり複雑で面倒になる可能性があります (古い windows.ini ファイルを覚えていますか? :-))。

可能であれば、独自の構成セクションを使用することをお勧めします.NET 2.0 を使用すると、非常に簡単になり、次のことが可能になります。

  • a)構成設定をコードで定義し、それらをタイプセーフでチェックします
  • b)自分の設定を他の人の設定から明確に分離できます。また、構成コードも再利用できます。

CodeProject の .NET 2.0 構成システムの謎を解き明かすための一連の非常に優れた記事があります。

  1. .NET 2.0 構成の謎を解き明かす

  2. .NET 2.0 構成の謎を解き明かす

  3. .NET 2.0 構成の謎を解き明かす

強くお勧めします!Jon Rista は、.NET 2.0 の構成システムについて説明してくれました。

于 2009-01-28T06:31:51.843 に答える
20

アプリケーション設定はデザイナー (通常は既定で Settings.settings ファイルがあります) から制御できるため、簡単に変更でき、厳密に型指定されたプロパティのように表示される Settings クラスを介してプログラムでアクセスできます。また、ロールバックのデフォルト設定だけでなく、アプリケーションおよびユーザー レベルの設定も行うことができます。

これは .NET 2.0 以降で利用可能であり、それを行う別の方法は非推奨です (私が知る限り)。

詳細については、msdn.microsoft.com /en-us/library/k4s6c3a0.aspx を参照してください。

于 2009-01-20T13:42:29.693 に答える
13

私は、基本的なxmlタグを使用し、設定を静的構成クラスにラップする、しばらく前に見つけたパターンを使用してきました。そう - DIY App.Settings。

DotNetPearls 静的構成パターン

このようにすると、次のことができます。

  • 環境ごとに異なる設定値のセットを使用する (dev、test、prod)
  • 各設定に適切なデフォルトを提供する
  • 値の定義方法とインスタンス化方法を制御する

セットアップは面倒ですが、うまく機能し、キー名への参照を隠し、厳密に型指定されています。この種のパターンは、アプリケーションによって変更されない構成に適していますが、おそらく変更のサポートも行うことができます。

構成:

<add key="machineName" value="Prod" />
<add key="anotherMachineName" value="Test" />
<add key="EnvTypeDefault" value="Dev" />

<add key="RootURLProd" value="http://domain.com/app/" />
<add key="RootURLTest" value="http://test.domain.com/app/" />
<add key="RootURLDev" value="http://localhost/app/" />

<add key="HumanReadableEnvTypeProd" value="" />
<add key="HumanReadableEnvTypeTest" value="Test Mode" />
<add key="HumanReadableEnvTypeDev" value="Development Mode" />

構成クラス:

using System;
using System.Collections.Generic;
using System.Web;
using WebConfig = System.Web.Configuration.WebConfigurationManager;

    public static class Config
    {
        #region Properties

        public static string EnvironmentType { get; private set; }

        public static Uri RootURL { get; private set; }

        public static string HumanReadableEnvType { get; private set; }

        #endregion

        #region CTOR

        /// <summary>
        /// Initializes all settings when the app spins up
        /// </summary>
        static Config()
        {
            // Init all settings here to prevent repeated NameValueCollection lookups
            // Can increase performance on high volume apps

            EnvironmentType =
                WebConfig.AppSettings[System.Environment.MachineName] ??
                "Dev";

            RootURL =
                new Uri(WebConfig.AppSettings["RootURL" + EnvironmentType]);

            HumanReadableEnvType =
                WebConfig.AppSettings["HumanReadableEnvType" + Config.EnvironmentType] ??
                string.Empty;
        }

        #endregion
    }
于 2011-03-08T22:01:02.480 に答える
9

単一の値を格納してアクセスするための単純なバージョンを使用するのが好きです。

<appSettings>
    <add key="MyConfigKey" value="true"/>
</appSettings>

デフォルト値を許可するタイプセーフな方法で値にアクセスするためのユーティリティ クラスを作成しました。デフォルトが提供されていない場合は、役立つ例外メッセージが表示されます。

ここでクラスを表示/ダウンロードできます。

http://www.drewnoakes.com/code/util/app-settings-util/

于 2009-06-08T06:52:05.173 に答える