He estado usando las transformaciones de configuración en VS2010 bastante últimamente, pero estoy confundido acerca de por qué algunas transformaciones se aplican directamente a Web.config en el paquete, pero otras se almacenan en un token en SetParameters.xml y luego se aplican en publicación.¿Por qué algunas transformaciones Web.config se convierten en tokenizadas en SetParameters.xml y otras no?
Por ejemplo, echar un Web.config con la siguiente configuración de cadena de conexión y aplicación:
<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>
Entonces aquí está la configuración correspondiente transformación para la configuración de generación actual:
<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>
Estos son tanto Las transformaciones "Reemplazar" y otras que no sean una cadena de conexión que coincida con "nombre" y la otra sea una configuración de aplicación que coincida con "clave", para mi ojo son idénticas.
Ahora mire dentro del archivo SetParameters.xml en el paquete resultante y solo la cadena de conexión tiene un nodo setParameter. En el archivo Web.config de la carpeta PackagTmp, la transformación de configuración de la aplicación ya se ha aplicado mientras que la cadena de conexión tiene un valor "$ (ReplacableToken_AutoDeployDb-Web.config Connection String_0)" que se aplica solo cuando se implementa el paquete.
¿Por qué es esto? ¿Es algo específico de las cadenas de conexión (o por el contrario, de la configuración de la aplicación)? Agradezco el rationale of this approach, no tengo claro por qué se aplica a algunas configuraciones y otras no.
¿Alguien puede arrojar algo de luz sobre esto?
Sería increíblemente útil si hubiera una manera sencilla (a través de una propiedad MSBuild) de tratar las configuraciones de la aplicación (ya sea las específicas o el conjunto completo) de esta manera también. p.ej. AutoParameterizationAppSettings = true. –
Este artículo es bastante bueno para definir una forma de resolver mi problema: http://vishaljoshi.blogspot.com/2010/07/web-deploy-parameterization-in-action.html –
¿Pero por qué alguien querría esto? –