visual studio 2010 - visual - ¿Por qué algunas transformaciones de Web.config se convierten en tokenizadas en SetParameters.xml y otras no?
vscode beautiful (2)
En cuanto a la implementación, hay una diferencia significativa entre ellos. Cuando importa paquetes web a IIS:
- Las cadenas de conexión se incluirán automáticamente en el diálogo del asistente para más parametrización.
- La configuración de la aplicación no estará allí por defecto. Si realmente desea hacerlo, siga los pasos de la sección "Parámetros personalizados - Configuración de la aplicación en el archivo web.config" de Configuración de parámetros para la implementación de paquetes web
La diferenciación crea un límite de responsabilidad entre dev y ops. Por un lado, coloca los parámetros del entorno de destino (base de datos, caché, clave / secreto de AWS, etc.) en cadenas de conexión de las que el operador debe ocuparse. Por otro lado, coloca opciones irrelevantes en la sección de configuración de la aplicación para que la carga de ops sobre productos específicos y la lógica de negocios pueda aliviarse.
En mi compañía, un chico de operaciones a menudo es responsable de múltiples productos. Realmente no puede exigirles que conozcan tanto conocimiento de productos como usted. Cuanto menos necesitan prestar atención, más feliz será la vida.
Últimamente he estado usando transformaciones de configuración en VS2010 pero estoy confundido sobre 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 ejemplo, tome un Web.config con la siguiente cadena de conexión y la configuración de la 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>
Luego, aquí está la transformación de configuración correspondiente para la configuración de compilació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>
Estas son transformaciones de "Reemplazar" y otras una cadena de conexión que coincide con "nombre" y la otra es una configuración de aplicación que coincide 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)? Aprecio la razón de ser de este enfoque , no tengo claro por qué se aplica a algunas configuraciones y otras no.
¿Alguien puede arrojar algo de luz sobre esto?
Esto en realidad no tiene nada que ver con las transformaciones de configuración. Acabo de publicar un blog muy detallado en http://sedodream.com/2010/11/11/ASPNETWebApplicationPublishPackageTokenizingParameters.aspx . Pero algo de información aquí para ti.
En la Web Publishing Pipeline (WPP), manejamos las cadenas de conexión como artefactos especiales. Crearemos automáticamente parámetros para usted para todas las cadenas de conexión. Esto se debe a que, en muchos casos, cuando implementa su aplicación, quiere cambiar las cadenas de conexión. No creamos automáticamente parámetros para ningún valor de configuración de la aplicación. Ahora volvamos a su pregunta ¿por qué tokenize las cadenas de conexión? Realmente estamos haciendo esto para asegurarnos de que no te pierdas la configuración del valor y, accidentalmente, tu aplicación actualice la base de datos incorrecta. Nosotros te ayudamos creando esos parámetros para ti. También puede deshabilitar este comportamiento si lo desea. Puede configurar la propiedad MSBuild AutoParameterizationWebConfigConnectionStrings en false.