Я использовал конфигурационные преобразования в VS2010 в последнее время, но в замешательстве, почему некоторые преобразования применяются непосредственно к Web.config в пакете, а другие хранятся против токена в SetParameters.xml, а затем применяются в публикации.Почему некоторые 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), которое применяется только при развертывании пакета.
Почему это? Это что-то конкретное для строк подключения (или, наоборот, к настройкам приложения)? Я ценю rationale of this approach, я просто не понимаю, почему он применяется к некоторым настройкам, а не к другим.
Может ли кто-нибудь пролить свет на это?
Это было бы невероятно полезно, если бы был простой способ (через свойство MSBuild) обрабатывать appSettings (либо конкретные, либо весь набор) таким же образом. например AutoParameterizationAppSettings = true. –
Эта статья неплоха в определении способа решения моей проблемы: http://vishaljoshi.blogspot.com/2010/07/web-deploy-parameterization-in-action.html –
Но зачем кому-то это хотеть? –