Я видел несколько вопросов, читал все сообщения, но я не могу этого сделать. Либо мне что-то не хватает, либо это невозможно.Как переопределить параметры развертывания ASP.NET при публикации
Итак, у меня есть довольно простой проект (ASP.NET MVC). В корне моего проекта есть parameters.xml файл с определениями параметров, таких как:
<?xml version="1.0" encoding="utf-8" ?>
<parameters>
<parameter
name="Realm"
description="Realm for ADFS authentication"
defaultValue="http://somewebsite">
<parameterEntry
kind="XmlFile"
scope="Web.config"
match="/configuration/appSettings/add[@key='ida:Realm']/@value" />
<parameterEntry
kind="XmlFile"
scope="Web.config"
match="/configuration/system.identityModel/identityConfiguration/audienceUris/add/@value" />
<parameterEntry
kind="XmlFile"
scope="Web.config"
match="/configuration/system.identityModel.services/federationConfiguration/wsFederation/@realm" />
до сих пор так хорошо. Эта структура очень хорошо понята, вы указали имя параметра развертывания (например, «Царство») по умолчанию для него и несколько параметров XCLT, где их можно найти в файле Web.config.
Теперь, когда я создать пакет развертывания, запустив публикации, я получаю каталог, содержащий:
- автогенерируемой CMD файл для развертывания
- риого файла
- манифеста XML файла
- Почтовый файл со всеми файлами, которые необходимо развернуть на моем сервере.
- .SetParameters.xml файл
Этот последний файл содержит значения параметров, которые были заданы в файле parameters.xml я цитировал выше, и эти значения устанавливаются как те, по умолчанию, которые были определены там.
, например. если значение по умолчанию для Realm было установлено на http://somewebsite, в сгенерированном SetParameters.xml развертывания, я получаю эту запись:
<setParameter name="Realm" value="http://somewebsite" />
Когда пакет развертывается, эти значения будут взяты из этого XML-файла и заменить значения в моем Web.Config, в соответствии с XPath, определенными в исходном файле parameter.xml.
Теперь я хочу переопределить эти параметры (как и многие другие) при создании моего пакета развертывания, поскольку мне нужны разные значения для разных профилей развертывания.
Ключ, кажется, мой файл .pubxml, который отвечает за настройки публикации. Я попробовал много вариантов, в том числе то, что сказал Сайед Хашими, here, предыдущие ответы даны here и here, here too (и другие тоже) ... ничто не может повлиять на проклятые параметры!
Я что-то упустил? Есть ли какой-то волшебный хак?
Должен ли я игнорировать параметры вообще и просто полагаться на соответствующее преобразование web.config? Любой другой совет? Может добавить пользовательские цели в файл .csproj? (даже попробовал это ...)
Спасибо! Alon.
Спасибо @ chief7! Я пытаюсь сократить работу и автоматизировать процесс с использованием существующих инструментов. Мне кажется, что невозможно связать набор значений параметров с профилем публикации (если только я не добавляю ручную работу вне msdeploy/build). Единственное обходное решение до сих пор: создание преобразования web.config, которое соответствует имени профиля публикации. Это не меняет web.config во время сборки, но только в выпущенном пакете развертывания. Он также более мощный, так как я могу внести фактические изменения в конфигурацию в соответствии с средой развертывания (например, различные ConfigSections для разных режимов auth). – alrotem
Если вы хотите развернуть процесс сборки, вам лучше всего настроить конфигурационные преобразования. Обратите внимание, однако это потребует от вас создания для каждого развертывания среды, что повышает риск того, что кто-то проверит новое изменение между сборками и внедрит непроверенный код в верхнюю среду. Удачи! – chief7
Еще раз спасибо @ chief7. Кстати, поскольку вы, кажется, более опытны в этом, чем я, предположим, что я хочу переопределить файл SetParameters.xml в папке развертывания (рядом с развернуть cmd-файл) с содержимым SetParameters.DEV.xml (так что те значения применяются во время развертывания), вы упоминаете сценарий PowerShell, так это то, как вы копируете/применяете/запускаете это? Может ли он быть каким-то образом автоматизирован из файла .pubxml при создании пакета развертывания? Мне просто очень странно, что переопределение «значений по умолчанию» в файле parameters.xml для каждого профиля публикации должно выполняться каким-то образом вручную ... – alrotem