Я держу один файл конфигурации и использую логику во время выполнения, чтобы определить, какое подмножество конфигурации использовать. Если имя хоста - «prodsrvr- *», тогда я использую конфигурацию производственного сервера, включая подключения к базе данных и т. Д. Если имя хоста - «test- *», тогда я использую данные конфигурации теста. И т. Д.
РЕДАКТИРОВАТЬ: вот код, который делает то, что я описал.
public static string GetConnString()
{
string connString = ConfigurationSettings.AppSettings[GetConfigKey("database")];
return connString;
}
public static string GetConfigKey(string baseKey)
{
string str = baseKey;
if (Dns.GetHostName().StartsWith("dinoch"))
{
str = str + "-dev";
}
else if (Dns.GetHostName().StartsWith("prodsrvr"))
{
str = str + "-prod";
}
return str;
}
<configuration>
<appSettings>
<add key="database-dev" value="server=(local)\vsdotnet;database=ASPXAPPS;Integrated Security=SSPI" />
<add key="database-prod" value="server=(local)\vsdotnet;database=ASPXAPPS;Integrated Security=SSPI" />
</appSettings>
</configuration>
Я использую простой StartsWith (), с некоторыми жестко закодированными «волшебными строками».
Чтобы избежать этого, я мог бы представить определение карты регулярных выражений для суффиксов в файле web.config. Где, если regex1 совпадает с именем хоста, тогда используйте суффикс1. Если regex2, то используйте суффикс2. И т. Д. Вы должны загрузить карту только один раз, а затем просто в foreach (), перечисляя через регулярные выражения и возвращая, если они совпадают с именем хоста.
Или, может быть, вы хотите использовать другой критерий, чтобы отличать prod от dev от тестовых серверов, кроме имени хоста. Это зависит от вас.