Несколько файлов конфигурации ASP.NET - PullRequest
3 голосов
/ 14 января 2010

Я нашел несколько фрагментов информации о наличии нескольких файлов конфигурации ASP.NET для веб-развертывания. Тем не менее, я все еще не уверен, смогу ли я выполнить то, что хочу достичь.

По сути, веб-сайт, над которым я работаю, может быть развернут на трех разных сайтах. В зависимости от сайта, на котором он развернут, параметры конфигурации необходимо изменить. То, что я хотел бы сделать, это иметь файлы конфигурации для каждой возможной конфигурации (полные файлы web.config) и затем иметь возможность сообщить сборке развертывания, какой файл конфигурации использовать для конкретного развертывания (я могу изменить это вручную, если необходимо).

Есть ли что-то столь же простое, как указание на другой файл .config, или мне нужно сделать что-то более сложное?

РЕДАКТИРОВАТЬ: Одна особая проблема, с которой я столкнулся, заключается в том, что мне также нужны настройки в system.net для настроек почты и т. Д. Итак, я не хочу, чтобы только переопределял AppSettings.

Спасибо

Ответы [ 3 ]

4 голосов
/ 14 января 2010

Любой раздел конфигурации - например, <smtp> - может быть «внешним», например хранится во внешнем файле.

Кроме оператора file= в <appSettings> (который доступен только для настроек приложения :-(), это не «дополнительный» параметр - вы просто указываете свою конфигурационную систему на внешний файл.

Так что вы можете иметь это в вашем app.config / web.config:

  <system.net>
    <mailSettings>
      <smtp configSource="smtp.test.config" />
    </mailSettings>
  </system.net>

и это в вашем smtp.test.config:

<?xml version="1.0" encoding="utf-8" ?>
<smtp>
  <network host="smtp.test.com" port="244" userName="test" password="secret" />
  <specifiedPickupDirectory pickupDirectoryLocation="C:\temp\mails"/>
</smtp>

Это работает с .NET 2.0 (может быть, даже 1.x) и работает для каждой конфигурации раздел - но не для конфигурации группы разделов как <system.web>.

Конечно, теперь вы можете создавать дополнительные конфигурационные файлы, такие как smtp.staging.config и т. Д., И теперь ваша проблема сводится к замене одной строки в вашем файле web.config.

Это можно сделать с помощью сценария установки, препроцессора XML или даже с помощью человека.

Это не полностью решает проблему, как .NET 4 и преобразования web.config , будем надеяться, но это шаг и небольшая помощь.

1 голос
/ 14 января 2010

На вашем основном web.config добавьте следующий атрибут к appSettings

<appSettings file="Web.site1.config">

Тогда asp.net увидит оба файла как один. Вы можете редактировать web.config, чтобы включал другой внешний файл, в зависимости от сайта.

0 голосов
/ 14 января 2010

Вы можете сделать это в .Net Framework 4. ScottGu демонстрирует это в своем недавнем выступлении в Швеции . В его примере он имеет постановку, производство и т. Д., Причем каждый файл имеет (потенциально) различное содержимое.

...