100

Acabo de actualizar a Visual Studio 2010 y MVC 2.0 y me di cuenta de que el Web.config tiene dos archivos adicionales conectados a él? ¿Se utilizan estos archivos para especificar ajustes específicos de depuración y liberación, para que no ocupe demasiado el Web.config principal?¿Para qué sirven los archivos Web.Debug.config y Web.Release.Config?

¿Tiene sentido incluso colocar una cadena de conexión en el archivo raíz Web.config si tengo una local y remota en la depuración y liberar Web.configs respectivamente?

Gracias!

Respuesta

90

Es la nueva característica de transformación Web.config de Visual Studio 2010. More information here.


Editar:

Are these files used to specify debug and release specific settings, so you don't clutter up the main web.config?

No se limita a tres archivos, usted podría (en teoría) tener tantos archivos como usted tiene ambientes. El "nivel superior" Web.config proporciona una plantilla de su configuración web. Los archivos debajo de este proporcionan valores de reemplazo específicos para ese entorno (como si tiene diferentes cadenas de conexión para local/stage/test/whatever).

Does it even make sense to place a connection string in the root web.config file if I have have a local and remote one in the debug and release web.configs respectively.

Tendría sentido si no fuera a cambiar entre entornos. Parece que en su caso sí, en su caso no, no tendría sentido dejarlo en el Web.config.

+9

Esta característica está a medio hacer, incluso 4 años más tarde! Solo funciona cuando se implementa en paquetes azules/de publicación. Aquí hay un hilo interesante: http://forums.asp.net/t/1532038.aspx – theoutlander

-3

Eso era algo necesario en VS. Desafortunadamente, parece haber un problema con la implementación. Por ejemplo, considere este escenario (VS.2010 último, todos los SP):

Web.Config

  • Ninguna sección connectionStrings
  • miembros plenos de usuario/Papel/etc. configuración del proveedor usando connectionStringName = "prueba"

Web.Release.Config

  • Sin configuración de miembros (ya se especifica en web.config principal) sección
  • connectionStrings incluyendo el CS denominado "Prueba"

Web.Debug.Config

  • Sin configuración de miembros (ya se especifica en web.config principal) sección
  • connectionStrings incluyendo el CS denominado "Prueba"

Al ejecutar la aplicación da el siguiente error:

The connection name 'test' was not found in the applications configuration or the connection string is empty.

En otras palabras , porque los elementos de cadena de conexión están en los archivos del diseñador Release/Debug y utilizados por los elementos de configuración en el archivo principal (Web.config), no se puede resolver.

+5

Para ser justos, si tiene una cadena de conexión llamada 'test' en sus archivos de configuración de depuración y liberación, realmente debería ser solo la web.config principal con las secciones apropiadas con plantilla. Como está, estás duplicando código, que es algo que se supone que la plantilla debe resolver por ti. – R0MANARMY

+3

-1: esta publicación muy antigua fue una interpretación errónea de cómo usar las transformaciones de configuración web. ** 1 ** En realidad no es una respuesta (solo una queja incorrecta) y ** 2 ** no es una simple combinación de elementos como lo implica aquí. Tienes que tener explícitos comandos de sustitución 'xslt'. * Bien hecho al obtener 5 upvotes por algo que se suma a la confusión sobre estos archivos de transformación * :) –

9

Estas son web.config transformaciones archivos. De ASP.NET Web Deployment using Visual Studio: Web.config File Transformations:

There are two ways to automate the process of changing Web.config file settings: Web.config transformations and Web Deploy parameters. A Web.config transformation file contains XML markup that specifies how to change the Web.config file when it is deployed. You can specify different changes for specific build configurations and for specific publish profiles. The default build configurations are Debug and Release, and you can create custom build configurations. A publish profile typically corresponds to a destination environment.

1

En caso de que a alguien le interesa, aquí es algo que escribió hasta tener una cadena de conexión dinámica por medio ambiente. Quería implementar el código en cualquier entorno (Dev, Test, Pre-Prod, Prod ...) sin tener que preocuparme por cambiar las cadenas de conexión. Realmente no pude encontrar una buena manera de hacer esto con Asp.Net MVC 4, así que se me ocurrió la manera de confiar en un archivo de propiedades por entorno.

Puede haber una solución mejor, vengo de un fondo de Wicket/Java y recientemente comencé a desarrollar con MVC 4 por lo que es posible que exista una mejor solución. Pero aquí hay un enlace a mi pregunta y respuesta para una cadena de conexión dinámica:

Asp.net MVC 4 dynamic connection string

Cuestiones relacionadas