Web.config Versioning

Actualmente estoy usando un model de database compartida para nuestro desarrollo. Lo sé, es mejor usar bases de datos de desarrollo locales para hacer versiones de bases de datos de la manera correcta sin que un desarrollador rompa el código de los demás. Así que eso es a lo que trato de llegar. Tengo una pregunta sobre el file web.config sin embargo. ¿Cómo me aseguro de que una vez que cada desarrollador tenga su propia database de desarrollo local, no tenga que cambiar manualmente la cadena de connection de la database cada vez que obtenga una actualización del control de origen? ¿Cuál es la mejor manera de hacer esto?

Por ejemplo, digamos que Johnny Dev confirma su web.config que contiene una cadena de connection como esta:

server=JohnnysBox;database=JohnnyAppDev1; 

Así que ahora Susie Dev recibe una actualización y tiene que cambiar su cadena de connection a esto:

 server=SUE;database=development; 

Entonces, Susie y Johnny continúan asignando sus propias cadenas de connection al file web.config, y cada vez que obtienen una actualización, tienen que cambiar las cadenas de connection en todas las aplicaciones.

¿Cuál es la mejor manera de manejar esta situación para que los desarrolladores no dañen la configuration de la cadena de connection de los demás, pero puede enviar otros types de cambios de files de configuration a todos los demás desarrolladores cuando sea necesario (como una nueva configuration de la aplicación)?

Para los files de configuration o configuration, lo que necesita para la versión es:

  • una plantilla de files ( server=@USER_NAME@;database=@DATABASE_NAME@; )
  • uno o varios files de valores
  • un script capaz de replace las variables por los valores correctos

Es solo una solución parcial, pero podría hacer que todos los desarrolladores creen un alias para su propio server SQL usando cliconfg.

Entonces el web.config en control de fuente tendrá, por ejemplo:

 server=LocalServerAlias;database=development 

Lo que hacemos aquí es nunca comprometer el file web.config con el control de origen. En cambio, asignamos un file web.config.sample, y cada desarrollador fusiona los cambios en ese file en su propio file web.config personal. Es responsabilidad de cada desarrollador manejar esas fusiones.

La forma en que trato esto es simplemente no verificar los cambios específicos del desarrollador en los files de configuration.

Cuando un cambio de configuration necesita registrarse, empiezo desde un file de configuration 'limpia' y realizo los cambios necesarios, luego realizo el check in. Cuando todos los demás obtienen una versión más reciente, pueden fusionar estos cambios en sus versiones locales.

La solución que obtuvimos en mi oficina fue que excluimos específicamente el control web.config del control de versiones, pero solo en la carpeta www. Esto permite a los desarrolladores hacer los cambios que necesitan localmente.

En una carpeta separada, tenemos una copy "maestra" de web.config, que es la versión controlada. A medida que se agregan nuevas secciones, keys, etc., es responsabilidad del desarrollador actualizar la copy maestra.

Puede crear múltiples files Web.config dependiendo del entorno en el que se ejecuta la aplicación. Usando la syntax de transformación puede modificar el Web.config principal para include o cumplir con su propia configuration local.

http://msdn.microsoft.com/en-us/library/dd465326(VS.100).aspx

Después, excluya este Web.xxx.config personalizado de su repository.

Bifurcamos la web.config. Entonces, tengo uno llamado Mattweb.config y puedo cambiarlo a voluntad, y reemplaza web.config EN MI MÁQUINA LOCAL SOLAMENTE con el contenido de Mattweb.config. No requiere intervención de mi parte.

También ramificamos el web.config "real", de manera que pueda compararlo con mi propia versión local para ver si se agregaron los packages o cualquier otro tipo de cambios. Luego solo actualizo mi file Mattweb.config y todo vuelve a estar bien.

Use (local) como el nombre del server SQL y siempre se refiere al server local. Este debería ser el valor pnetworkingeterminado en el file web.config que ingresa en el control de origen.

Para las "instalaciones" de producción, el instalador debe preguntar al usuario si desea utilizar un server SQL remoto y, de ser así, actualizar los files web.config como parte del process de installation.