Diferentes configuraciones * .csproj / * .config para cada miembro del equipo y twig

Esta pregunta es una especie de dos en uno, pero ambos están relacionados con el mismo problema.

Somos un equipo de 10 desarrolladores, algunos desarrolladores prefieren usar una instancia completa de IIS, mientras que otros prefieren usar IIS-Express. El uso de IIS tiene sus ventajas, por ejemplo, IIS se asemeja más a la producción, mientras que IIS-Express permite la debugging de Edit-and-Continue.

Además del equipo de trabajo de 10 desarrolladores, estamos utilizando el control de fuente, y tenemos una estructura de ramificación. Cada twig puede tener diferentes configuraciones de web.config / app.config, como cadenas de connection a la database. Un desarrollador puede estar trabajando en más de una twig cada vez, por lo que normalmente tenemos una database por twig, estamos viendo desarrolladores que tienen bases de datos locales, pero la colisión de nombres sigue siendo un problema independientemente del enfoque (es decir, un desarrollador puede tener 2 bases de datos locales, una para cada twig).

El primer problema es el que tiene los files csproj, específicamente la configuration del server web. Si un desarrollador comtesting en un file csproj que usa IIS-Express, y el otro desarrollador obtiene un Get Latest , sobrescribirá su configuration, perdiendo time y creando frustración.

Por supuesto, la solución más fácil sería forzar a todos a usar una herramienta, una configuration, pero preferiría no hacerlo, especialmente para algo que no tiene relación con la salida resultante (código comstackdo).

El segundo problema es con los files de configuration, los files de configuration se almacenan en el control de código fuente (al igual que cualquier otro file), por lo que cuando hacemos la fusión de bifurcación, estos files deben actualizarse manualmente después. Sé que existen las transformaciones de debugging y liberación para los files de configuration, que podrían tener diferentes cadenas de connection en ambos, pero esto no resuelve el problema porque dos desarrolladores individuales pueden estar trabajando en la misma twig pero con diferentes cadenas de connection.

La solución obvia a esto es que todos tienen la misma configuration exacta siempre, pero algunos desarrolladores pueden querer usar la instancia de LocalDB, otros pueden querer usar SQL-Express, mientras que el server de transición usa una instancia de SQLServer completa. De nuevo, esta es otra configuration que no tiene ningún efecto en el resultado final.

No he visto ninguna solución a mis problemas particulares, en lo que respecta a la administración de configuraciones entre los miembros del equipo, y entre la bifurcación / fusión.

Específicamente para el server web, VS tiene una checkbox "Aplicar la configuration del server a todos los usuarios (almacenar en el file del proyecto)": si no está seleccionada, la configuration se almacena en su file .csproj.user local, para que todos puedan tener su propia configuration allí .

Para las cadenas de connection, puede tener un file "user.config" en cada máquina (no en el control de fuente), donde el desarrollador puede poner su cadena de connection. El file de configuration principal solo puede cargar este file para get la cadena de connection. Hay algunas forms de hacerlo, pero lo he intentado:

App.config or Web.config: <?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings configSource="user.config"></connectionStrings> </configuration> user.config: <connectionStrings> <add name="test" connectionString="Server=.;Database=...;"/> </connectionStrings> 

Si fuera una aplicación de Windows, establecería la propiedad "Copiar en el directory de salida" en el file user.config, para que Visual Studio lo copie en su directory bin.

Si entiendo correctamente tu pregunta, ¿te gustaría básicamente excluir tu app.config / web.config / ciertos otros files de la verificación? Por alguna razón, esto parece ser una opción oculta …

Finalmente encontramos la respuesta a nuestro problema similar seleccionando los files .config en el Explorador de soluciones y haciendo clic en (Visual Studio) File -> Source Control -> Exclude selection from Source Control .

Esto evitará que los files seleccionados se comprueben y sobrescriban los files del otro desarrollador.

(Nota: esto funciona en VS2010, no puedo garantizar que esta opción exista en 2012)

Tuve un problema similar cuando tuve 3 bases de datos para 3 sucursales para 3 entornos.

Production Server ==> Production DB ==> prod branch ==> Prod connection string Servidor de testing ==> Master DB ==> Rama principal ==> cadena de connection principal Desarrollo local ==> DB local ==> twig de desarrollador == > cadena de connection del desarrollador …

Dentro de la carpeta .git, hay ganchos git donde puedes poner scripts para ejecutar cada vez que compras una sucursal. Tengo un script post-checkout que se ejecuta cada vez que pago y que actualiza la cadena de connection para que me guarde de los cambios manuales en el file web.config:

! / bin / bash

. config eval $ (git branch | grep " " | sed "s / //")

sed -es / {SERVER} / $ server / g -es / {DATABASE} / $ database / g -es / {USER} / $ user / g -es / {PASS} / $ pass / g -es / {SITE_TYPE } / $ site_type / g \