Можно ли связать преобразование Web.config с профилем публикации?

В настоящее время я могу легко настроить преобразование Web.config на основе конфигурации сборки, например. используйте connectionString=server;.. для Debug и connectionString=./SQLExpress;.. для Release.

Но возможно ли выполнить преобразование Web.config на основе профиля веб-публикации? т.е. использовать connectionString=server1;.. для профиля Server1 и connectionString=server2;.. для Server2 ?


person abatishchev    schedule 21.06.2010    source источник


Ответы (3)


Мы храним всю конфигурацию машины/профиля в отдельных файлах конфигурации, а затем используем configSource, чтобы включить их вот так...

    <connectionStrings configSource="cstrings.config"/>

Таким образом, Web.config остается тем же и не требует никаких преобразований. Мы делаем это для строк подключения, настроек smtp и настроек приложения.

Мы управляем версиями Web.config и «специфичных для машины» файлов, таких как cstrings.config.production, cstrings.config.staging и т. д.

Имея такую ​​структуру, легко создавать изображения для разных профилей. У нас есть сценарии развертывания на каждой машине, которые считывают переменную среды и развертывают ее соответствующим образом. Например, скрипт сборки промежуточного сервера копирует cstrings.config.staging в cstrings.config и т. д.

person Rob    schedule 30.06.2010
comment
Как вы запускаете сценарии развертывания, чтобы связать текущий профиль и соответствующую строку подключения? - person abatishchev; 30.06.2010
comment
@abatishcev: Наш сервер сборки имеет цели для тестирования, подготовки и производства. Выполняется чистая проверка (фактически экспорт svn). Сценарии сборки переименовывают ${bin}/cstrings.config.${Destination} ${bin}/cstrings.config, затем мы запускаем модульные тесты, zip и ftp развертываем на целевой машине. Каждое место назначения имеет файлы конфигурации cstrings, smtp и appsettings в системе управления версиями. например, cstrings.config.staging, smtp.config.staging, appsettings.config.staging. К вашему сведению: вы можете оставить cstrings.config на целевых машинах как файл только для чтения, если вы очень заботитесь о безопасности. В наших условиях это не имеет большого значения. - person Rob; 01.07.2010

Это можно сделать немного другим способом.

На рабочих серверах создайте фиктивную запись для customdb в файле c:\windows\system32\drivers\etc\hosts на каждой рабочей машине. Каждый из них указывает на базу данных, которую вы хотите использовать на этой машине. Тогда вам нужно только указать на connectionString=customdb; для всех ваших рабочих серверов.

Единственным недостатком этого будет то, что вам потребуется доступ к файлу hosts, и вам потребуется использовать файл db.

Надеюсь это поможет

person Jonathan Stanton    schedule 27.06.2010
comment
Интересно. Тем не менее, еще одним недостатком является то, что вы не можете (легко) управлять версиями файла hosts, поскольку он будет содержать настройки для конкретной машины и усложняет процесс развертывания, требуя доступа для записи к системным путям, которых обычно следует избегать. - person Abel; 30.06.2010

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

Однако, если вы используете MSDeploy, есть способы изменить там файл web.config. См. MSDeploy — Изменение параметра строки подключения после развертывания пакета для получения дополнительных сведений.

person Zhaph - Ben Duguid    schedule 24.06.2010