asp.net - studio - Administrar web.config para equipos en VS2010 y TFS
visual studio installer (5)
Jarrett,
Todo lo que tengo es una anécdota sobre cómo manejamos la situación.
Tenemos un equipo de 4 programadores.
Usamos una solución de control de fuente fuera de VS - TortoiseSVN. Cada uno de nosotros mantiene nuestro propio web.config local que está incluido en el proyecto. El archivo del proyecto está incluido en el repositorio, pero tenemos el conjunto web.config en el estado "Ignorar al confirmar".
No estoy seguro de qué control de código fuente está utilizando, pero la subversión con Tortoise SVN (que se ejecuta fuera de Visual Studio) ha funcionado de maravilla para nuestro pequeño equipo. La mayoría de nosotros programamos en dos máquinas separadas ... una en la oficina, otra en casa ... así que cuando lo combinas con el hecho de que tenemos dos servidores de producción, estamos lidiando cómodamente con 10 web.config por proyecto.
Dicho esto, debe recordar traer el archivo web.config de otro desarrollador cuando configure una nueva computadora de desarrollo; de lo contrario, la solución no se cargará correctamente o configurará un archivo web.config predeterminado que no contiene las cadenas de conexión apropiadas y Ajustes de Aplicacion.
Y una nota final: estamos usando IIS 7 para la depuración
Con el mandato de VS2010 de que se incluya web.config en el proyecto, ¿cómo permitimos que todos mantengan su propio archivo de configuración personalizado sin entrar en problemas de control de origen?
Anteriormente, simplemente dejábamos web.config fuera de nuestro proyecto, permitiéndoles a todos mantener su propia versión local de web.config en su máquina. Nos movimos a VS2010, y ahora me obliga a agregar web.config a mi proyecto para ejecutar el modo de depuración. Como nuestro proyecto está vinculado a TFS, automáticamente agrega web.config al control de fuente e intenta mantenerlo de esa manera.
¿Hay alguna manera de ejecutar en modo de depuración sin incluir web.config en su proyecto? ¿O hay una mejor manera de administrar los archivos de configuración?
He usado plantillas T4 para resolver esto. En lugar de tener un web.config, tiene un web.tt que genera un web.config. En el archivo web.tt puede generar código diferente en función del nombre del equipo o del usuario actual.
No he visto una buena respuesta para administrar diferentes archivos web.config por desarrollador con TFS hasta la fecha.
Sin embargo, si se abordan los problemas que provocan que los programadores necesiten diferentes archivos web.config, normalmente se obtendrán mejores resultados independientemente del sistema de control de versiones elegido.
Por ejemplo, menos diferencias entre entornos de desarrollador reducirá los argumentos de Works On My Machine (WOMM) y también reducirá los cambios de configuración para entornos más allá del desarrollo (por ejemplo, Prueba, Producción) que a su vez simplifica la implementación y reduce molestos errores específicos de configuración de entorno. .
Dependiendo de la naturaleza del elemento de configuración, generalmente hay varias estrategias diferentes para mitigar las diferencias por entorno. Muchos de los cuales sospecho que ya tienen respuestas en .
Espero que esto ayude a alguien. He usado esta metodología durante los últimos meses. Esto es realmente fácil de hacer. Estoy usando VS 2010 con TFS 2010. Desglosemos:
- Todos los archivos de configuración web ahora son "DependentOn" del "web.config"
- Cada desarrollador o equipo necesita su propio "[Usuario / Equipo] .Debug.config"
- Los archivos de configuración se deben transformar independientemente de si estamos "publicando" en modo de lanzamiento o no.
Así es como se hace:
Haga clic con el botón derecho en el proyecto web al que desea hacer esto y elija "Descargar proyecto" (no "Eliminar proyecto").
Haga clic con el botón secundario en el mismo proyecto web nuevamente (debería aparecer atenuado ahora) y elija "Editar ... csproj". Esto abrirá el proyecto en un editor Xml.
Desplácese hacia abajo hasta encontrar la sección que tiene todos los listados "Web.config". Ahora, comente todos los elementos "DependentUpon" en el Xml.
Cierre el editor Xml y guarde sus cambios. A continuación, haga clic de nuevo en su proyecto y seleccione "Volver a cargar". Cuando el proyecto se vuelva a cargar, notará que Web.configs ya no se "apila" en "Web.config". Esto es necesario para "engañar" a TFS.
Ahora, copie el archivo "Web.config", péguelo en el mismo proyecto y cámbiele el nombre a "Web.base.config". Esto se usará para volver a generar Web.config cada vez (se cubre a continuación).
Ahora, seleccione el archivo Web.config y vaya a "Archivo -> Control de fuente -> Excluir Web.config del control de código fuente". Además, abra el Explorador de control de código fuente (vista del Explorador de TFS) y busque la ubicación de dónde se encuentra su Web.config y elimínelo de TFS. Esto se hace porque Web.config se volverá a generar cada vez que construya el proyecto (que cubriré a continuación).
Ahora, vamos a crear un nuevo archivo de compilación que nos ayude a regenerar el Web.config para cualquier tipo incorporado, incluso depurar (que es lo que el Web.config Transformed careció para comenzar). Cree un nuevo archivo Xml en su proyecto y cámbiele el nombre a "[YourProjectName] .wpp.targets". Es importante nombrar exactamente a qué se llama su proyecto, incluidos todos los puntos, guiones, etc. (por ejemplo, My.Project.wpp.targets).
Ahora, ingrese el siguiente Xml en el nuevo archivo. No se preocupe si comienza a subrayar los errores de sintaxis:
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)/Microsoft/VisualStudio/v10.0/Web/Microsoft.Web.Publishing.Tasks.dll"/> <!-- Make sure web.config will be there even for package/publish --> <Target Name="CopyWebConfig" BeforeTargets="Build;Rebuild"> <Copy SourceFiles="Web.base.config" DestinationFiles="Web.config" OverwriteReadOnlyFiles="true" SkipUnchangedFiles="false" /> </Target> <Target Name="CustomTarget" BeforeTargets="BeforeBuild"> <Message Text="Transforming: Web.$(Configuration).config" Importance="high" /> <TransformXml Source="Web.base.config" Transform="Web.$(Configuration).config" Destination="Web.config" /> </Target> </Project>
Ahora, desde este punto, NUNCA, NUNCA edita Web.config, se sobrescribirá cada vez que compile la aplicación. Solo edita el "Web.base.config".
Ahora, hagamos que el Proyecto se vea como era. Haga clic derecho en el proyecto de nuevo y "Descargarlo". Ahora, haz clic derecho nuevamente y "Edítalo". Ahora, retroceda y elimine los comentarios de todos los Elementos que comentamos en el Paso 3. Además, debe agregar el elemento "DependentOn" en el elemento "Web.base.config" para que aparezca también en "Web.config". Ciérrela y guárdela, luego vuelva a cargar su proyecto. Debería notar que todas las configuraciones están ahora bajo el "Web.config" nuevamente.
En este punto, puede agregar tantas Configuraciones a su Proyecto / Solución como desee. Por ejemplo, he agregado una configuración de compilación llamada "Tim (Debug)", pero la configuración del proyecto se llama "Tim.Debug". Cuando hago clic derecho en "Web.config" y elijo "Agregar transformaciones de configuración", ahora agrega mi archivo "Web.Tim.Debug.config". También puede agregar configuraciones por entorno o por equipo.
Vale la pena señalar que los archivos de configuración individuales son solo un subconjunto del "Web.base.config" y serán "Transformados" durante cualquier proceso de compilación. Para cambiar qué Transform se va a generar durante la depuración, solo diríjase a la parte superior de la solución y elija la configuración de compilación que desee. Siempre que tengas un web.config para esa Build Config, se transformará. De lo contrario, obtendrá el "Web.base.config" en su lugar.
NOTA: Esto también debería funcionar con las aplicaciones estándar de Windows / WPF con el "app.config".
SO tiene una buena respuesta para esto aquí ... No he comprobado los múltiples web.configs en VS2010 pero me pregunto si esto fue agregado debido a los cambios que hicieron en web.conig ..