Можно ли упаковать веб-сайт с профилем публикации с помощью msbuild и пропустить преобразования web.config?

99
8

У меня есть решение сайтов с тремя профилями публикации, которые мы используем для преобразования строк подключения для каждой целевой среды:


    Test - соединения localhost, никаких преобразований, значения по умолчанию отмечены в
    Стадия - среда VM
    Производство - реальная сделка

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


    Отладка - настройки преобразования для этапа
    Настройки Release - transform для Production

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


Есть ли способ сообщить msbuild о пакете веб-сайта, используя профиль Test, но пропустить конфигурационное преобразование? Или мне нужно реструктурировать конфигурации сборки вокруг окружения? (то есть оставить Debug и Release самостоятельно и создать конфигурацию сборки для каждой среды)


Заявление о построении командной строки


Я создаю конфигурацию своего теста в конфигурации Debug solution и, безусловно, собираю преобразованный файл Web.Debug.config. Нет файла Web.Test.config, потому что Test является "публичным профилем", а не конфигурацией сборки.


cmd> msbuild websites.sln /t:Build /p:Configuration=Debug;Platform="Any CPU";DeployOnBuild=true;DeployTarget=Package;PublishProfile=Test;VisualStudioVersion=11.0

Возможно, я делаю что-то не так. Я чувствую, что Config/Platform являются избыточными, так как я предоставляю их в диалоговом окне "Опубликовать профиль". Версия Visual Studio была для меня неожиданностью, но была необходима для создания пакета zip.

спросил(а) 2013-07-30T18:55:00+04:00 7 лет, 10 месяцев назад
1
Решение
77

В конце концов, я сделал то, что начал Mitch, - поддерживайте связь 1:1 между конфигурациями решений/проектов, публикациями профилей и средами. Инструмент работает лучше, если вы дадите ему все, что он хочет.


Итак, это должно быть без проблем


| Environment | Solution       | Publish  | Assembly       |
| | Configuration | Profile | Configuration |
============================================================
| Test | Test | Test | Debug |
| Staging | Staging | Staging | Debug |
| Prod | Prod | Prod | Release |

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

cmd> msbuild my.sln /t:Build /p:DeployOnBuild=true;DeployTarget=Package;PublishProfile=Staging;VisualStudioVersion=11.0

И все заканчивается в опрятной папке пакета


.\websites\somewebsite\obj\Staging\Package

ответил(а) 2013-08-13T17:22:00+04:00 7 лет, 10 месяцев назад
77

Если вы создаете свои веб-сайты sln из командной строки, вы можете указать параметр OutputPath:
например


msbuild websites.sln /p:OutputPath=c:\test

Когда это запустится, откройте c:\test и вы найдете папку _PublishedWebsites со всеми вашими скомпилированными сайтами. Не требуется никаких профилей публикации.
Ах, но как мне настроить его без использования msdeloy и публикации профилей?
Вы можете создавать свои собственные XDT, например, для отладки и выпуска, web.config.staging добавлять эти файлы и устанавливать
Build Action: контент
копировать на вывод: Копировать всегда


Вы можете использовать инструмент преобразования xdt, например CCT, чтобы конвертировать ваши веб-конфигурации в любое удобное для вас время.
(т.е. вне Visual Studio - при развертывании или даже повторном развертывании)
CTT - потрясающий BTW. Также, чтобы сделать это еще на один шаг, вы должны создать свои шаблоны XDT файлов и иметь свойства для каждого env uat, prod и т.д., Но это еще одна игра.

ответил(а) 2013-07-31T11:30:00+04:00 7 лет, 10 месяцев назад
77

Я бы построил конфигурацию для каждой среды для согласованности. Однако, если конфигурация не предусмотрена для конкретной среды (т.е. Web.Test.config), опубликованная сборка будет использовать только то, что было помещено в ваш исходный файл web.config, а не преобразовать.

ответил(а) 2013-07-30T19:00:00+04:00 7 лет, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема