Почему некоторые преобразования Web.config токенизируются в SetParameters.xml, а другие нет? - PullRequest
33 голосов
/ 11 ноября 2010

В последнее время я довольно часто использую преобразования config в VS2010, но меня смущает вопрос, почему некоторые преобразования применяются непосредственно к Web.config в пакете, а другие хранятся в токене в SetParameters.xml, а затем применяются при публикации.

Например, возьмите Web.config со следующей строкой подключения и настройкой приложения:

<connectionStrings>
  <add name="AutoDeployDb" connectionString="Data Source=(local);Initial Catalog=AutoDeploy;User ID=AutoDeployUser;Password=Passw0rd"/>
</connectionStrings>
<appSettings>
  <add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" />
</appSettings>

Затем приведем соответствующее преобразование конфигурации для текущей конфигурации сборки:

<connectionStrings>
  <add xdt:Transform="Replace" xdt:Locator="Match(name)" name="AutoDeployDb" connectionString="Data Source=MyDevServer;Initial Catalog=AutoDeploy;User ID=AutoDeployUser;Password=s*#@Kdsl" />
</connectionStrings>
<appSettings>
  <add xdt:Transform="Replace" xdt:Locator="Match(key)" key="ChartImageHandler" value="storage=file;timeout=20;dir=d:\inetpub\AutoDeploy\TempImageFiles\"/>
</appSettings>

Это оба преобразования «Заменить», и одно из них является строкой подключения, совпадающей с «именем», а другое - параметрами приложения, совпадающими с «ключом», на мой взгляд, они идентичны.

Теперь посмотрите в файл SetParameters.xml в результирующем пакете, и только строка подключения имеет узел setParameter.В файле Web.config папки PackagTmp преобразование параметров приложения уже применено, пока строка подключения имеет значение «$ (ReplacableToken_AutoDeployDb-Web.config Connection String_0)», которое применяется только при развертывании пакета.

Почему это?Это что-то особенное для строк подключения (или, наоборот, для настроек приложения)?Я ценю обоснование этого подхода , я просто не понимаю, почему он применяется к некоторым настройкам, а не к другим.

Может кто-нибудь пролить свет на это?

Ответы [ 2 ]

37 голосов
/ 11 ноября 2010

Это на самом деле не имеет ничего общего с конфигурационными преобразованиями.Я только что опубликовал очень подробный блог на http://sedodream.com/2010/11/11/ASPNETWebApplicationPublishPackageTokenizingParameters.aspx. Но некоторая информация здесь для вас.

В конвейере веб-публикаций (WPP) мы обрабатываем строки подключения как специальные артефакты. Мыавтоматически создаст параметры для всех строк подключения.Это связано с тем, что во многих случаях при развертывании приложения вы хотите изменить строки подключения.Мы не создаем автоматически параметры для какого-либо значения appSettting.Теперь вернемся к вашему вопросу, почему мы токенизируем строки подключения?Мы действительно делаем это, чтобы убедиться, что вы не пропустили установку значения, а затем случайно сделали приложение обновляющим неправильную БД.Мы помогаем вам, создавая эти параметры для вас.Также вы можете отключить это поведение, если хотите.Вы можете установить для свойства MSBuild AutoParameterizationWebConfigConnectionStrings значение false.

1 голос
/ 26 июня 2014

Что касается развертывания, между ними есть одно существенное отличие. При импорте веб-пакетов в IIS:

  • Строки подключения будут автоматически включены в диалоговое окно мастера для дальнейшей параметризации.
  • Настройки приложения не будут там по умолчанию. Если вы действительно хотите это сделать, выполните шаги в разделе «Пользовательские параметры - Параметры приложения в файле web.config» в Настройка параметров для развертывания веб-пакетов

Дифференциация создает границу ответственности между dev и ops. С одной стороны, вы помещаете параметры целевой среды (базы данных, кеша, ключа / секрета AWS и т. Д.) В строки подключения, о которых должен заботиться ops. С другой стороны, вы помещаете не относящиеся к делу параметры в раздел настроек приложения, чтобы облегчить нагрузку ops на определенные продукты и бизнес-логику.

В моей компании один сотрудник часто отвечает за несколько продуктов. Вы действительно не можете требовать, чтобы они знали столько же знаний о продукте, сколько и вы. Чем меньше на них нужно обращать внимания, тем счастливее будет жизнь.

...