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

  1. Для каждого сайта настраиваем профиль публикации как нужно (способ публикации Web Deploy). При этом профиль публикации нужно называть по имени сайта. Например для “site1.ru” профиль должен называться “site1.ru” 🙂 Пароль можно не сохранять
    imageimage
  2. Каждый сайт находится в отдельной папке. Надо чтобы эта папка назвалась по имени сайта. Так проще будет
    image
  3. Внутри каждой папки стандартная сайтовая требуха: картинки, исходники, вебконфиги и главное csproj файл, надо чтобы csproj файл назывался по имени сайта.
    image
  4. Закидываем в папку cmd файл такого содержания:

Получается так:

image

Теперь, когда мы запускаем этот cmd файл, он спрашивает пароль и закидывает его в переменную pass. За это отвечают эти строки:

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

В переменную %1 подставляется строка имя сайта, в %pass% подставляется пароль, который ты введешь ранее.

Эта команда и компилирует и публикует сайт. разберем параметры msbuild:

  • %1.ru/%1.ru.csproj – путь к фалйу проекта
  • /verbosity:m – сколько информации выводить на экран о компиляции и публикации (m типа medium – немного чтобы мы не офигели)
  • /t:Build,Clean – тут мы задаем что нужно сделать – построить и очистить
  • /p:DeployOnBuild=true – задаем параметром чтобы выполнялось развертывание сайта после его построения
  • /p:AllowUntrustedCertificate=true – это если у твоего сервера левый ssl сертификат, ну то есть обязательный параметр
  • /p:PublishProfile=%1.ru.pubxml – имя файла-профиля публикации, лежит в папке проекта Properties\PublishProfiles и называется по имени профиля публикации
  • /p:UserName=ТУТ_ИМЯ_ПОЛЬЗОВАТЕЛЯ — тут пишешь имя пользователя для подключения к серверу, куда публикуем. По-хорошему нужно для каждого сайта свое имя юзера задать и передавать в функцию compile_and_publish как параметр. Но лень
  • /p:Password=%pass% – а вот пароль берем из переменной pass

Удачи в пакетной публикации!