0

いくつかの設定(接続文字列、フォルダーパス)を構成ファイルに保存する必要があります。

App.configを使用する必要がありますか?

当たり前のようですが…。

1)アプリ。.NET構成のもの(パッケージ、バージョンなど)が含まれていますが、誰にも触れてほしくないので、常にこれらをプログラムにコンパイルしたいと思います。

2)dev-mode構成設定をプログラムにコンパイルし、App.Configが欠落しているときに呼び出されるのは奇妙に感じます(デフォルトは組み込みリソースなど)

3)クリーンな設定ファイルが好きなので、設定が何であるかが一目でわかります(そして私はOCDを持っています)?

4

3 に答える 3

1

はい、全部詰め込みapp.configます。私の理由は、エンド ユーザーだけが知っている部分 (接続文字列やフォルダー パス) であっても、実際にはエンド ユーザーが編集できるものapp.config何もないということです。コンピューターに詳しくない人にメモ帳で XML ファイルを編集してもらいたいですか? 私はそうではないことを知っています。

エンド ユーザーの値を取得する唯一の信頼できる方法app.configは、インストール中にユーザーに入力を求め、カスタム アクションとして自分で記述することです。

于 2013-02-19T22:37:10.433 に答える
0

はい、これはベストプラクティスであり、基本的な構成変更を行うためにアプリケーションを再コンパイルする必要がないようにします。新規ユーザーは自動メールを受信する必要があります。アプリを再コンパイルして再デプロイするよりも、構成ファイルを変更する方がはるかに簡単です。構成ファイルの問題に関して、ここにエレガントな解決策があります:http: //www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx

開発から本番に移行するために必要な量に応じて、ファイルの名前を変更するか、コメント付きの文字列を保持することを好みます。

于 2013-02-19T22:29:27.233 に答える
0

*.config ファイルに対する私のルールは、バイナリを再デプロイせずに設定を変更できるようにしたい場合に使用することです。変更を行うために配置を要求することを気にしない場合は、定数を使用します。確信が持てない場合は、構成ファイルを使用します。ほとんどの場合、構成ファイルを使用します。

何かに *.config を使用するときは、公開したい値ごとに 1 つの静的な読み取り専用プロパティを持つ別の「構成」クラスを介してそれらの値を公開します。つまり、私のアプリ構成に設定がある場合

<add key="ServerLoadTime" value="-30" />

次に、構成クラスは次のようになります。

public static class Configuration
{

    /// <summary>
    /// Get the number of minutes before prior to the event that the server is started.
    /// </summary>
    public static int ServerLoadTime
    {
        get
        {
            if (ConfigurationManager.AppSettings["ServerLoadTime"] != null)
                return int.Parse(ConfigurationManager.AppSettings["ServerLoadTime"]);

            Logging.Write("ServerLoadTime is missing from the Configuration file.", EventLogEntryType.Warning, Logging.Sources.General, "Configuration.ServerLoadTime", null);
            return -30; // return a default value.
        }
    }

}

このアプローチにより、以下を提供する標準化されたカプセル化が作成されます。

  • CM を使用して有効性を確認することなく、値を参照する簡単な方法。
  • 不適切に構成された値/欠損値を処理するためのサーフェス。
  • 構成ファイルからの文字列を必要な型にキャストする場所。
  • デフォルトの最後の手段を提供しながら、欠落している値をログに記録する場所。
  • 必要に応じて結果にロジックを付けるための対処場所。
于 2013-02-19T22:35:46.500 に答える