6

Estoy aprendiendo ASP.Net MVC 2, proveniente de un PHP y algunos raíles de fondo, y una de las únicas cosas que me parece desagradable es la forma de administrar las configuraciones como las cadenas de conexión o puntos finales para servicios externos.Múltiples entornos en ASP.Net MVC 2

Con el framework PHP que mi compañía anterior usó había un formato estándar y una convención para archivos de configuración. Mi empresa pudo aprovechar esto para que se cargara un archivo de configuración diferente basado en una variable de entorno (que se configuró en la configuración de Apache). Esto hizo que fuera muy simple y automático cambiar cualquier configuración establecida en función del entorno. Hasta donde yo sé, Rails tiene incorporada alguna versión de esta funcionalidad.

Estoy familiarizado con los archivos app.config y web.config del mundo .Net, pero ¿hay alguna forma de tener estos cambios en función del entorno, preferiblemente automáticamente, y con varios niveles de granularidad? Todo el sistema de configuración parece muy anémico en comparación con lo que estoy acostumbrado.

Probablemente podría hackear algo para lograr esto, pero quería ver qué enfoque toman las personas en la práctica, o si hay alguna herramienta estándar que las personas están usando.

+0

+1 para el tema impresionante –

Respuesta

1
+0

Eso, junto con las soluciones sugeridas en los comentarios, parece ser la ruta más viable. – notJim

+0

@notJim Lo he estado usando en un proyecto durante aproximadamente un año, y me ha ayudado mucho. El único problema es que debe tener cuidado de elegir la configuración correcta cuando implemente. Pero es un buen paso para automatizar el proceso de compilación e implementación. – CGK

0

Obviamente, puede ejecutar su entorno en "Debug" vs "Release". La variable ENV en Rails y convenciones similares en PHP son claramente uno de sus puntos fuertes. Como con cualquier opción, siempre hay una compensación y esa es una de ellas. Cuando estoy en los rieles puedo apreciar la capacidad de cargar su variable ENV (prueba, desarrollo, producción ...) con las gemas apropiadas y tal. Es genial. Cuando estoy en raíles, también hay una diferencia considerable entre VS Intellisense, probablemente lo mejor que hay.

Dicho esto, algunos trucos que he visto han sido los códigos figuran propiedades MACHINENAME en las cadenas de conexión apropiados y similares, de manera WebConfigs fácilmente se pueden pasar entre los diferentes desarrolladores y servidores, etc ...

3

No es web.config transformations.

Probablemente estoy equivocado, pero parece recordar que no se aplicarían si uno simplemente iniciara la aplicación con el botón "Iniciar depuración (F5)" dentro de Visual Studio, haciendo que la característica no parezca práctica para una gran cantidad de usos.

+0

Tiene razón, no aplica esas transformaciones cuando acaba de construir. Tienes que ejecutarlo manualmente usando 'MSBuild', o crear un paquete desde Visual Studio. Tal vez el '.csproj' se puede modificar para realizar la transformación como una acción posterior a la construcción. – notJim

0

Personalmente utilizo machine.config para administrar la configuración de entorno específicas. Este archivo contiene configuraciones específicas de la máquina.

Si no tiene máquinas dedicadas para cada entorno, sino que utiliza diferentes sitios web en IIS, podría tener un archivo raíz web.config ubicado en la raíz de cada sitio web que contiene configuraciones específicas del entorno.

Básicamente dentro de este archivo de configuración global, guardo pares de clave/valor que contienen los nombres de mi SQL Server, servidor de servicios web, ... que varían según el entorno y luego en mi aplicación utilizo esas claves para construir las cadenas de conexiones finales , direcciones web http, ...

Una vez que esas configuraciones de configuración global están en su lugar, puede implementar exactamente los mismos archivos de aplicación con web.config entre todos los entornos.