ASP.NET: archivo de configuración personalizado externo en un directorio virtual: ¿cómo hacerlo?
-
07-07-2019 - |
Pregunta
Sé que hay al menos dos enfoques para aprovechar el archivo web.config:
- utilizando el atributo
configSource
que se introdujo en .NET 2.0 - aquí hay una buena entrada de blog al respecto. - El atributo
file
de la etiqueta appSettings que le permite apuntar a un archivo externo con una ruta relativa. Descrito en la documentación de MSDN sobre el elemento appSettings .
Ahora, mi problema es que ambos enfoques funcionan bien solo para rutas físicas . Pero necesito direccionar un archivo de configuración que está en un directorio virtual .
¿Qué otro método podría usar para poner mis recursos de configuración en un directorio virtual?
Nota: Quiero hacerlo de esta manera, porque tengo varias instancias de mi aplicación web en el mismo servidor (y en muchos servidores). Para mantener la implementación fácil y limpia, quiero mantener un directorio para todos los archivos (aspx, ascx, imágenes, css, js, etc.) y apuntar las aplicaciones web en IIS para diferentes clientes (= dominios, https, etc.) para esto Directorio único. En cada web de IIS, tendría un directorio virtual llamado "personalizado". que apunta a una carpeta diferente para cada web.
Actualización: me gustaría señalar que este directorio virtual " personalizado " no es adecuado para contener un web.config heredado: ese web.config sería válido solo para la carpeta personalizada que no contiene archivos aspx / ascx.
Solución
Tengo el mismo escenario y después de leer tu publicación me di cuenta de que asp.net no te permitirá hacer esto por varias razones de seguridad.
Por lo tanto, recurrí al sistema operativo para encontrar un equivalente a la función de enlace suave de Linux que a su vez me llevó a Utilidad de unión de sysinternals. Esto puede crear un directorio que en realidad es cualquier otro directorio en ese volumen y asp.net no puede notar la diferencia y por eso carga las secciones de configuración que no están realmente en un subdirectorio de su sitio web. Funciona para mí :)
Otros consejos
Los directorios virtuales se pueden configurar como aplicaciones, y puede colocar otro web.config allí.
Heredará cualquier cambio de la configuración principal, y puede agregar configuraciones personalizadas en él.
Estaba buscando hacer lo mismo pero no funcionó, así que decidí hacer lo contrario, ya que sabes que web.config se puede heredar, así que apunté a IIS a una carpeta que contiene la configuración del cliente (cadena de conexión , ruta de archivo, etc.) y los archivos del sitio web los puse en un directorio virtual con el resto de la configuración web (donde carga dll y otros archivos de aplicación necesarios) Básicamente, puedo usar los archivos del sitio web para clientes múltiples y los clientes con su propia cadena de conexión de base de datos y otras configuraciones específicas del cliente.