Я использовал конфигурационные преобразования в 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 node. В папке Web.config папки PackagTmp преобразование параметров приложения уже применяется, когда строка подключения имеет значение $(ReplacableToken_AutoDeployDb-Web.config Connection String_0), которое применяется только при развертывании пакета.
Почему это? Это что-то конкретное для строк подключения (или, наоборот, к настройкам приложения)? Я ценю обоснование этого подхода, я просто не понимаю, почему он применим к некоторым настройкам, а не к другим.
Может ли кто-нибудь пролить свет на это?