3

ASP.NET で複数の Web.config を持つことができる方法と同様に、ビルド構成に応じて複数の App.config を持つことは可能ですか?

接続文字列を変更したいので、構成を構築している場合test、接続文字列は次のようになります。

"Server=test;Initial Catalog=test..."

に対して構築しtest2ている場合、接続文字列は次のようになります。

"Server=anotherserver; Initial Catalog=test2..."

現在、手動で行っているため、これを自動化するにはどうすればよいですか?

4

2 に答える 2

1

これらはネイティブでサポートされていませんが、Webアプリケーションプロジェクトだけでなく、Windowsフォームプロジェクト(App.config)でもXML変換を行うことができます。

そのサポートを可能にするVSアドインがあり、私は試したことはありませんが、MSBuildについて深い知識を持っていると確信している少なくとも1人のMicrosoft従業員によって作成されているため、VSがインストールされている環境に推奨します。彼はすでにこの主題に関する本を書いているので。

SlowCheetah-XML変換

SlowCheetahがVSがインストールされていないCIサーバーをサポートしているかどうかはわかりません。そのため、カスタムターゲットファイルを含めることに基づいた別のソリューションも提供します。

Visual StudioApp.configXML変換

(恥知らずなプラグ通知、私は上記のものの原作者でした)

于 2012-12-12T22:13:59.960 に答える
0

ここでは、うまく機能すると思われる戦略を使用します。ソリューションごとに 1 つの Web.config があります。これは app.configs でも機能すると思いますが、試したことはありません。クラスを作成し、それを ConfigurationManager などと呼びます。クラスでは、次のコードに移動する必要があります。

public static class ConfigurationManager
{
    private static NameValueCollection _appSettings = new NameValueCollection();
    private static ConnectionStringSettingsCollection _connSettings = new ConnectionStringSettingsCollection();

    private enum SettingsType {App, Connection};

    public static NameValueCollection AppSettings
    {
        get 
        {
            if (_appSettings.Count == 0)
            {
                LoadEnvironmentSettings(SettingsType.App);
            }
            return _appSettings;

        }

    }

    public static ConnectionStringSettingsCollection ConnectionStrings
    {
        get
        {
            if (_connSettings.Count == 0)
            {
                LoadEnvironmentSettings(SettingsType.Connection);
            }
            return _connSettings;
        }
    }

    private static void LoadEnvironmentSettings(SettingsType settingsType)
    {
        string strEnvironment = string.Empty, strSeparator = ".";
        if (ConfigurationManager.AppSettings.HasKeys())
        {
            strEnvironment = ConfigurationManager.AppSettings["Environment"];

            if (!String.IsNullOrEmpty(strEnvironment))
            {
                strEnvironment += strSeparator;
                switch (settingsType)
                {
                    case SettingsType.App:
                        LoadAppSettings(strEnvironment.ToUpper());
                        break;
                    case SettingsType.Connection:
                        LoadConnectionSettings(strEnvironment.ToUpper());
                        break;
                }
            }
            else //that part should never happen
            {
                throw new Exception("Missing Environment AppSetting");
            }
        }
    }
    private static void LoadAppSettings(string environmentType)
    {
        string appKey = string.Empty;
        foreach (string key in ConfigurationManager.AppSettings.AllKeys)
        {
            if (key.StartsWith(environmentType))
            {
                appKey = key.Replace(environmentType, string.Empty);
                _appSettings.Add(appKey, ConfigurationManager.AppSettings[key]);
            }
        }
    }
    private static void LoadConnectionSettings(string environmentType)
    {
        //ConnectionStringSettings connStrings = new ConnectionStringSettings();
        string connKey = string.Empty;

        foreach (ConnectionStringSettings str in ConfigurationManager.ConnectionStrings)
        {
            if (str.Name.StartsWith(environmentType))
            {
                connKey = str.Name.Replace(environmentType, string.Empty);
                _connSettings.Add(new ConnectionStringSettings(connKey, str.ConnectionString));
            }
        }
    }
}

System、System.Collections.Generic、System.Collections.Specialized、System.Configuration、および System.Text を追加する必要があります。クラスが、作業中のプロジェクトと同じ名前空間にあることを確認してください。次に、構成ファイルに 2 つ (またはそれ以上) のキーを追加します。

<add name="TEST.MyConnectionString" connectionString="Data Source=TESTServer;Initial Catalog=MyDatabase;user id=MyUser;pwd=Mypwd" />
<add name="TEST2.MyConnectionString" connectionString="Data Source=TEST2Server;Initial Catalog=MyDatabase;user id=MyUser;pwd=Mypwd" />

最後に、machine.config で、appSettings に以下を追加します。

<add key="Environment" value="TEST"/>

また

<add key="Environment" value="TEST2"/>

やりたいこと次第。通常、DEV、STAGING、および PROD キーを配置し、3 つの異なる DEV、STAGING、および PROD サーバーに異なる machine.config ファイルを配置します。お役に立てれば

于 2012-12-12T18:01:33.090 に答える