Con VS2010 el mandato de la web.config ser incluidos en el proyecto, ¿cómo podemos permitir que todo el mundo mantenga su propio archivo de configuración personalizado sin entrar en el origen de los problemas de control?

Anteriormente, nosotros simplemente lo dejaría web.de configuración de nuestro proyecto, lo que permite a todos a mantener su propia versión local de la web.config en su máquina. Nos mudamos a VS2010, y ahora me obliga a añadir web.config para mi proyecto de fin de ejecutar en modo de depuración. Debido a que nuestro proyecto está vinculado a TFS, se agrega automáticamente en la web.config para el control de código fuente y se intenta mantener de esa manera.

Hay una manera para que se ejecute en modo de depuración, sin incluir en la web.config en tu proyecto? O hay una mejor manera de administrar los archivos de configuración?

  • Sólo por curiosidad, ¿qué información en la web.config es diferente entre los desarrolladores?
  • Podría ser muchas cosas, desde el DB conexiones a cualquier web de enlaces de servicio, la configuración de la aplicación, autorizaciones, etc… Pueden ser tantas cosas que no puedo ni siquiera imaginar.
  • Aquí una solución rápida (un paso en VS) pero no ponen la responsabilidad en la que el desarrollador de «monitor» de los cambios. El archivo se queda en el proyecto como usted requirió. Básicamente, usted dígale a TFS no obtener / check-out / check en este archivo en particular mediante el uso de «Manto»: stackoverflow.com/questions/9741975/…
InformationsquelleAutor Jaeell | 2010-05-28

5 Comentarios

  1. 32

    Espero que esto ayude a alguien. He utilizado esta metodología para el último par de meses. Esto es muy fácil de hacer. Estoy usando VS 2010 con TFS 2010. Vamos a desglosarlo:

    • Todas las web de los archivos de configuración están ahora «DependentOn» la web».config»
    • Cada desarrollador o equipo necesita su propio «[Usuario/Equipo].De depuración.config»
    • Archivos de configuración debe ser transformado sin importar si estamos en «Publicar» en el modo de disparador o no.

    Aquí cómo se hace:

    1. Haga clic derecho en el proyecto Web que usted quiere hacer esto y elegir la opción «Descargar Proyecto» (no «Quitar Proyecto»).

    2. Haga clic derecho en el mismo proyecto Web nuevo (debe ser atenuada ahora) y seleccione la opción «Editar …csproj». Esto abrirá el proyecto en un editor de Xml.

    3. Desplácese hacia abajo hasta encontrar la sección que tiene toda la Web».config» listados. Ahora, un comentario fuera de todos los «DependentUpon» elementos en el Xml.

    4. Cerrar el editor de Xml y guardar los cambios. A continuación, haga clic en el proyecto de nuevo y elegir la opción «Recarga». Cuando el proyecto se vuelve a cargar, te darás cuenta de que la Web.configs ya no «pila» en virtud de la Web».config». Esto es necesario con el fin de «engañar» a TFS.

    5. Ahora, copia de la Web».config» archivo, pegar en el mismo proyecto y cambiarle el nombre a «de la Web.de la base.config». Esto va a ser usada para re-generar la Web.config de cada tiempo (cubiertas siguiente).

    6. Ahora, seleccione la Web.archivo de configuración y vaya a «Archivo –> Control de código Fuente –> Excluir de la Web.de configuración de Control de código Fuente». También, Abra el Explorador de Control de código Fuente (TFS de la vista del Explorador) y encontrar la ubicación de su Web.configuración y eliminarlo de TFS. Esto se hace porque la Web.config va a ser re-generado cada vez que se genera el proyecto (que voy a cubrir la siguiente).

    7. Ahora, vamos a crear un nuevo archivo de construcción que nos ayudará a regenerar la Web.config de cualquier Tipo, incluso de Depuración queridos (que es lo que la Web.config Transformado faltaba para empezar). Crear un nuevo archivo Xml en su proyecto y cambiarle el nombre a «[YourProjectName].wpp.objetivos». Es importante que el nombre de este exactamente lo que su proyecto se llama incluyendo todos los puntos, guiones, etc (ex. Mi.Proyecto.wpp.los objetivos).

    8. Ahora, introduzca el siguiente código Xml en el archivo nuevo. No te preocupes si comienza subrayando 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>
    9. Ahora, a partir de este momento, NUNCA, NUNCA modificar el Web.config, se sobrescribirá cada vez que la aplicación se compila. Sólo editar la Web».de la base.config».

    10. Ahora, vamos a hacer el Proyecto como fue. Haga clic derecho en el Proyecto de nuevo y «Descargar» de ella. Ahora, haga clic en nuevo y «Editar» de ella. Ahora, volver atrás y quite el comentario de todos los Elementos que hemos comentado en el Paso #3. También, se debe agregar el «DependentOn» elemento», » bajo «de la Web.de la base.config» elemento de modo que se mostrará en la Web».config» así. Cerrar y guardar, a continuación, volver a cargar de nuevo el proyecto. Usted debe notar que todas las configuraciones están ahora en la Web».config» de nuevo.

    11. En este punto, usted puede agregar el número de Configuraciones para su Proyecto /Solución como usted desea. Por ejemplo, he añadido una Acumulación de configuración llamado «Tim (Debug)», pero el Proyecto de configuración se llama «Tim.Debug». Cuando me haga clic en la Web».config» y seleccione «Añadir Config Transforma», se agrega ahora mi Web».Tim.De depuración.config» del archivo. Usted también puede añadir las configs por el entorno o por equipo.


    Vale la pena señalar que sus archivos de configuración son sólo un sub-conjunto de la Web».de la base.config» y que serán «Transformados» durante cualquier proceso de construcción. Para cambiar que Transformar va a ser construido durante la depuración, sólo tiene que ir a la parte superior de su solución y elegir la que Construir de configuración que desee. Mientras usted tiene un sitio web.config para que Build Config, se transformará. Si no, usted obtendrá la Web».de la base.config» en su lugar.

    NOTA: Esto también se debe trabajar con el estándar de Windows/aplicaciones WPF así como también el uso de la aplicación.config» en su lugar.

    • Esto es absolutamente impresionante. He hecho un cambio para que no de error si no hay una Web.De configuración.config: <Target Name="ConfigurationTransform" BeforeTargets="BeforeBuild" Condition="Exists('Web.$(Configuration).config')">. Y debemos tener en cuenta que cada desarrollador tiene que ser la construcción de su propio «Configuración». Me gustaría que hubiera una manera confiable para incluir una «máquina.config» en el proyecto sin VS constantemente tratando de protegerlo.
    • +1 Esto es exactamente lo que yo estaba pensando en hacer yo mismo. Así que he buscado y lo tengo aquí. Gran trabajo de Tim.
    • Uno de los más P: ya has jugado con estos de MS construir objetivos que usted probablemente sabe lo que hay que añadir a transformar algunos otros archivos de configuración así? Web de configuración permite tener appSettings definida en otro archivo de configuración decir, appSettings.config. ¿Cómo podemos agregar que en las transformaciones así (dependiendo debe ser editados manualmente para los transforma para mostrar de forma jerárquica, pero eso no es un problema).
    • Gracias @Tim. Alguien sabe si esto va a funcionar con TFS Build? Quiero algo como la Web.La puesta en escena.config para que se auto-crear y publicar para el desarrollo/entorno de ensayo.
    • Creo que 7 de paso la necesidad de corregir: «antes de eliminar web.config de TFS necesidad de cerrar la solución de lo contrario web.config será eliminado de la web en el proyecto».
    • He utilizado tu, básicamente, la secuencia de comandos, pero cambió un poco porque algunos (desconocido) razones, BeforeTargets=»BeforeBuild no ejecutar la tarea. Escribí todo dentro de la predefinidos BeforeBuild de destino. (Estoy usando visual studio 2012)
    • Lo que hace que el wpp.objetivos archivo que se ejecute? No tenemos que agregar algo en el archivo de proyecto?

  2. 3

    No he visto una buena respuesta para la gestión de diferentes web.los archivos de configuración por desarrollador con TFS hasta la fecha.

    Sin embargo, si los problemas que causan a los desarrolladores requieren diferentes web.los archivos de configuración están dirigidas en su lugar, esto normalmente se traduce en mejores resultados, independientemente de la versión que hayas elegido el sistema de control.

    Por ejemplo, menos diferencias entre los entornos de desarrolladores reducirá Funciona En Mi Máquina (WOMM) argumentos y a menudo también a reducir los cambios en la configuración de los entornos más allá de desarrollo (por ejemplo, Prueba, Producción) que a su vez simplifica la implementación y reduce los molestos medio ambiente específicas para la configuración de errores.

    Dependiendo de la naturaleza del elemento de configuración, por lo general hay diferentes tipos de estrategias para mitigar por medio de las diferencias. Muchos de los que sospecho que ya tienen respuestas en Stack Overflow.

    • Estoy totalmente de acuerdo en esto.
  3. 1

    Jarrett,

    Todo lo que tengo es una anécdota acerca de cómo manejar la situación.

    Contamos con un equipo de 4 programadores.

    Utilizamos una fuente de la solución de control fuera de VS — TortoiseSVN. Cada uno de nosotros mantener nuestra propia web.de configuración que se incluye en el proyecto. El archivo de proyecto está incluido en el repositorio, pero tenemos la web.conjunto de configuración para «Omitir en cometer» de estado.

    No estoy seguro de cuál de control de código fuente que se usa, pero a la subversión con Tortoise SVN (que se ejecuta fuera de Visual Studio) ha trabajado para nuestro pequeño equipo. La mayoría de nosotros el programa en dos equipos separados… en la oficina, en la casa.. así que cuando la pareja que con el hecho de que tenemos dos servidores de producción, estamos cómodamente el trato con 10 web.configuración por proyecto.

    Con que dijo, usted tiene que recordar a traer otra web del desarrollador.archivo de configuración cuando el programa de instalación de un nuevo equipo de desarrollo, de lo contrario, la solución no se carga correctamente, o la instalación de una web predeterminado.config que no contiene la correspondiente cadenas de conexión y configuración de la aplicación.

    Y una nota final: estamos usando IIS 7 para la depuración

    • Por desgracia, estamos usando TFS2010 aquí, así que no tiene la misma flexibilidad de SVN. Me gustaría que hubiera la simple capacidad para ignorar un solo archivo.
    • Jarret, pensé que mi consejo podría no ser completamente relevante, sólo pensé en compartir mi experiencia
  4. 1

    Por LO que tiene una buena respuesta para este aquí .. no he comprobado las múltiples web.configs en VS2010 pero me pregunto si esto fue añadida a causa de los cambios que se hicieron a la web.conig..

    • Sí, me fijé en eso, y que va a trabajar cuando se muda a un servidor diferente. Pero, no quiero comprobar cada dev versión de la web.config (así como la necesidad de crear una generación diferente perfil) así que tenía la esperanza de evitar el checkin por completo.
  5. 1

    He usado plantillas T4 para solucionar esto. En lugar de tener una web.configuración, usted tiene un web.tt que genera una web.config. En la web.tt archivo puede generar código diferente basado en el equipo o el usuario actual.

    • Me encantaría si usted puede señalar algunos recursos en hacer esto, he escuchado mucho, pero nunca jugó con Plantillas T4
    • ha ok, justo lo suficiente. Voy a ver tu enlace y hasta algunos de automatización ; ) letmebingthatforyou.com/?q=t4%20template

Dejar respuesta

Please enter your comment!
Please enter your name here