1

私は、最初にテスト環境 (ENV-T) にデプロイされた典型的な .net Web アプリに取り組んでおり、テストが完了した後、本番環境の ENV - P に移動されます。ホスティング プロバイダーは、最初にデプロイされる代わりに、Prod に直接何もデプロイしません。テストしてから、PROD に同期します。

また、これら 2 つの環境 Env-T と Env-P はまったく異なります。そのため、Web.Config の設定も異なります。

したがって、ENV-P に何かをデプロイするには、Env-P に従って ENV-T の web.config を変更する必要があります。そして、ホスティング ベンダーにアプリケーションの同期を依頼してから、元に戻す必要があります。

この問題を解決するために、Web.config 環境を独立させることを考えました。そこで、アプリケーションが動作している現在の環境を識別し、それに応じて値をロードするカスタム ConfiguraitonManager クラスを作成しました。

高レベルのアプローチ: ENV-T フォルダーに 1 つ、ENV-P フォルダーにもう 1 つの 2 つの Web.config があります。マシン名に応じて、環境を識別します。ENV-T の場合は ENV-T フォルダーから Web.Config 値をロードし、ENV-P の場合は ENV-P フォルダーから値をロードします。

これが私のクラスです:

public static class ConfigurationManager
{
    static Configuration _config;
    static NameValueCollection nameValueColl;
    public static NameValueCollection AppSettings
    {
        get
        {

if (nameValueColl == null)
            {
                if (_config == null)
                    _config = LoadConfig();
                nameValueColl = new NameValueCollection();
                foreach (KeyValueConfigurationElement configElement in _config.AppSettings.Settings)
                {
                    nameValueColl.Add(configElement.Key, configElement.Value);

                }

            }
            return nameValueColl;
        }
    }

    private static Configuration LoadConfig()
    {
        string basePath = string.Empty;


        if (System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath != null)
        {
            basePath = System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath;
        }

        string machineName = System.Environment.MachineName;

        if (machineName.Equals("MachineA"))
        {
            _config = WebConfigurationManager.OpenWebConfiguration(basePath + "Test");
        }
        else if (machineName.ToLower().Equals("MachineB"))
        {
            _config = WebConfigurationManager.OpenWebConfiguration(basePath + "Prod");
        }


        return _config;
    }

}

今、私がしなければならないのは書くことだけです

ConfigurationManager.AppSettings["KEY1"]

Appsettingキー「KEY1」を読み取ると、その特定の環境の正しい値が得られます。

質問: 私は鍵を持っています <add key="NoOfRecords" value="50"/>

何らかの理由で (1 日か 2 日で) 数回ヒットした後、NoOfRecords キーの値は 50 ではなく 50,50,50,50,50 になります。考えられる理由: キーを追加すると、値は「NoOfRecords」となります。 50" を、既に "NoOfRecords","50" を持つ NameValueCollection オブジェクトに対して、値を "NoOfRecords","50,50" として格納します。

しかし、これがどのように考えられるかは、このコード ブロックの直前に新しいオブジェクトを作成していて、この nameValueColl 変数の null チェックも行っているためです。

4

0 に答える 0