ここでは、うまく機能すると思われる戦略を使用します。ソリューションごとに 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 ファイルを配置します。お役に立てれば