asp.net управляет несколькими файлами web.config - PullRequest
3 голосов
/ 29 марта 2009

Кто-нибудь может предложить хороший способ управления несколькими файлами web.config?

Например, у меня есть файл разработки web.config, который я использую на своей локальной машине под названием «localWeb.config», а затем один, который я использую для производства, называется «prodWeb.config». Я сохраняю расширения .config, чтобы никто не мог получить к ним доступ с веб-сервера.

localWeb.config, например, будет иметь строку подключения к базе данных разработки, в то время как prodWeb.config имеет строку подключения к рабочей базе данных.

В настоящее время я использую событие postbuild, которое скопирует содержимое localWeb.config или prodWeb.config в web.config. Это хорошо работает, но мне было интересно, если кто-нибудь знает какие-либо лучшие способы.

Ответы [ 4 ]

3 голосов
/ 29 марта 2009

Вы можете убедиться, что метод, описанный в этом CodeCarnage страница , лучше соответствует вашим потребностям. Он использует атрибут configsource для указания параметров БД и APP, каждый из которых разделен средой. Возможно, это позволит вам сохранить согласованный материал в файле web.config и сохранить «материал», относящийся к среде, в других файлах конфигурации.

2 голосов
/ 29 марта 2009

Ознакомьтесь с Web Deployment Tool :

Вот лишь некоторые из задач, которые выполнить с помощью инструмента:

  1. Создать пакет, содержащий контент, конфигурацию и SQL базы данных для развертывания или обмена с другими.

  2. Используйте пакет как способ версии вашего приложения или создания резервных копий.

  3. Добавить параметры для замены строки подключения или другого значения в файл во время установки пакета.

  4. Позволяет неадминистраторам развертывать пакеты и детально контролировать их доступ.

  5. Синхронизация или миграция как сайтов, так и серверов под управлением IIS 6.0 и IIS 7,0.

1 голос
/ 29 марта 2009

это будет продолжаться до тех пор, пока не появится asp.net 4 http://www.asp.net/learn/whitepapers/aspnet40/#_Toc223325501

1 голос
/ 29 марта 2009

Я держу один файл конфигурации и использую логику во время выполнения, чтобы определить, какое подмножество конфигурации использовать. Если имя хоста - «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 от тестовых серверов, кроме имени хоста. Это зависит от вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...