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