Використання різних Web.config в середовищі розробки та виробництва


194

Мені потрібно використовувати різні рядки підключення до бази даних та адресу SMTP-сервера в моєму додатку ASP.NET, залежно від того, що це запускається в середовищі розробки або виробництва.

Програма читає налаштування з файлу Web.config через властивість WebConfigurationManager.AppSettings .

Я використовую команду Build / Publish для розгортання програми на виробничому сервері через FTP, а потім вручну замінюю віддалений Web.config на правильний.

Чи можливо якось спростити процес розгортання? Дякую!

Відповіді:


159

У Visual Studio 2010 і вище ви тепер маєте можливість застосувати перетворення до свого web.config залежно від конфігурації збірки.

Створюючи web.config, ви можете розширити файл у провіднику рішень, і ви побачите два файли:

  • Web.Debug.Config
  • Web.Release.Config

Вони містять код перетворення, до якого можна використовувати

  • Змініть рядок з'єднання
  • Видаліть налагоджувальний слід та налаштування
  • Зареєструйте сторінки помилок

Для отримання додаткової інформації див. Синтаксис трансформації Web.config для розгортання проекту веб-додатків на MSDN.

Також можливо, хоча і офіційно не підтримується, застосувати такий самий вид перетворення до app.configфайлу додатку, який не використовується в Інтернеті . Дивіться блог Філа Болдука про те, як змінити файл проекту, щоб додати нове завдання до msbuild.

Це тривалий запит на відмову в рахунку користувача Visual Studio .

Розширення для Visual Studio 2010 і вище, « SlowCheetah » є подбати про створення перетворення для будь-якого файлу конфігурації. Починаючи з Visual Studio 2017.3, SlowCheetah був інтегрований в IDE і базою коду керує Microsoft. Ця нова версія також підтримує трансформацію JSON.


7
Зауважте, що це не працює для старих проектів веб- сайтів . Тільки для веб- додатків . Я не намагався зрозуміти, чи працює метод Філа Болдука для веб-сайтів, але я підозрюю, що цього не стане, оскільки у них немає файлів проекту.
мо.

13
Також зверніть увагу , що web.confg трансформує роботу тільки для публікації, вони не працюють , якщо ви просто збірки / запуску F5: ((((
Alex

7
Якщо ваш web.config не містить Web.Debug.Configа Web.Release.Config, вам може знадобитися клацнути правою кнопкою миші Web.Configта натиснути її Add Config Transforms.
Doug S

1
@ Алекс: як ми можемо використовувати його для простого складання / F5?
пантер

1
пряме посилання на SlowCheetah: marketplace.visualstudio.com/…
Сяо

83

<appSettings>Тег в web.config підтримує атрибут файлу , який буде завантажувати зовнішній конфиг з його власним набором ключових / значень. Вони замінять будь-які налаштування у вашому web.config або додадуть їх.

Ми використовуємо це, змінюючи наш web.config під час встановлення на атрибут файлу, який відповідає оточенню, на яке встановлюється сайт. Ми робимо це за допомогою перемикача нашого інсталятора.

наприклад;

<appSettings file=".\EnvironmentSpecificConfigurations\dev.config">

<appSettings file=".\EnvironmentSpecificConfigurations\qa.config">

<appSettings file=".\EnvironmentSpecificConfigurations\production.config">

Примітка:

  • Зміни в .config, визначені атрибутом, не спровокують перезапуск робочого процесу asp.net

2
Це відмінна відповідь, особливо коли у вас є велика кількість середовищ, а деякі параметри для деяких середовищ мають паролі та подібні, які ви не хочете відслідковувати в контролі джерела.
Філ

1
Чи є динамічний спосіб зміни шляху файлу? На основі того, на якому сервері ви знаходитесь? Лише бічна примітка, що це працює над старим проектом веб-сайту, а не веб-додатком. Тож дякую!
Перспектива

2
Є атрибут, restartOnExternalChangesякий розглядає ці файли так, ніби вони були web.configs. Джерело: learnnable.com/books/…
Девід Шварц

24

Ви заглядали в проекти веб-розгортання?

http://www.microsoft.com/downloads/details.aspx?FamilyId=0AA30AE8-C73B-4BDD-BB1B-FE697256C459&displaylang=en

Існує версія і для VS2005, якщо ви не на 2008 рік.


Це хороший посібник із використання проектів веб-розгортання: johnnycoder.com/blog/2010/01/07/…
Gary W

Проекти веб-розгортання, схоже, є VS "Publishing Profiles" тепер diaryofaninja.com/blog/2012/08/26/…
jocull

13

Я також хотів би знати. Це допомагає вирішити проблему для мене

<connectionStrings configSource = "connectionStrings.config" />

Потім я зберігаю connectionStrings.config, а також "{host} connectionStrings.config". Проблема все ще залишається проблемою, але якщо це зробити для розділів, які відрізняються в двох середовищах, ви можете розгорнути та встановити версію того ж web.config.

(І я не використовую VS, btw.)


Якщо ви використовуєте VS, ви можете використовувати події попереднього збирання для копіювання з debug.connectionstrings.config або release.connectionstrings.config, наприклад: копіювати $ (ProjectDir) $ (ConfigurationName) ConnectionStrings.config $ (ProjectDir) ConnectionStrings.config, як запропоновано від Скотта. Hanselmann: hanselman.com/blog/…
Томас

6

Я використовую сценарій NAnt Build Script для розгортання в моїх різних середовищах. У мене він змінює свої конфігураційні файли через XPath залежно від того, куди вони розгорнуті, а потім він автоматично вводить їх у це середовище за допомогою програми "Більше порівняння" .

На налаштування знадобиться хвилина-дві, але це потрібно зробити лише один раз. Потім пакетні файли беруть на себе, а я йду ще одну чашку кави. :)

Ось стаття, яку я знайшов у ній.


5

В одному проекті, де у нас було 4 середовища (розробка, тестування, постановка та виробництво), ми розробили систему, де додаток обрав відповідну конфігурацію на основі назви машини, на яку він був розгорнутий.

Це працювало для нас тому, що:

  • адміністратори могли розгортати програми, не залучаючи розробників (вимога) та без необхідності воювати з конфігураційними файлами (які вони ненавиділи);
  • Назви машин дотримуються конвенції. Ми відповідали іменам, використовуючи регулярний вираз і розгорнувшись на декількох машинах в оточенні; і
  • ми використовували інтегровану безпеку для рядків з'єднання. Це означає, що ми могли зберігати імена облікових записів у наших конфігураційних файлах під час проектування, не виявляючи паролів.

У нас це спрацювало добре, але, ймовірно, не працювало б скрізь.


3

У цьому допоможе редактор конфігурації бібліотеки підприємств. Це дозволяє створити базовий конфігураційний файл, а потім дельти для кожного середовища. Потім можна об'єднати базовий конфігурацію та дельту, щоб створити специфічний для середовища web.config. Погляньте на ту інформацію тут , який довезе вас через це краще , ніж я можу.


3

Ви також можете зробити цей крок після збирання. Встановіть нову конфігурацію, яка є "Розгортання" на додаток до "Налагодження" та "Випуск", а потім скопіюйте крок після збирання після правильної веб.config.

Ми використовуємо автоматизовані збірки для всіх наших проектів, а разом із ними скрипт збірки оновлює файл web.config, щоб вказати на правильне розташування. Але це не допоможе вам, якщо ви робите все від VS.


3

Це одна з величезних переваг використання machine.config. На моїй останній роботі у нас було середовище розробки, тестування та виробництва. Ми можемо використовувати machine.config для таких речей, як рядки підключення (до відповідної SQL-машини dev / test / prod).

Це може не бути рішенням для вас, якщо у вас немає доступу до фактичної виробничої машини (наприклад, якщо ви використовували хостинг-компанію на спільному хості).


1

Ви також можете використовувати розширення "Конфігурація трансформації" працює так само, як "SlowCheetah",


так, це працює, але тільки при розгортанні, а не при компіляції, я б хотів просто скомпілювати та налагоджувати, використовуючи різні середовища перетворення конфігурації
Ch'nycos
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.