2009-01-12 60 views
8

¿Hay alguna manera en el tiempo de ejecución para cambiar las aplicaciones app.config (current.config a new.config, file for file). Tengo un proceso de copia de seguridad/restauración que necesita reemplazar su propio archivo application.exe.config. Lo he visto post pero no responde cómo hacerlo en tiempo de ejecución.¿Es posible cambiar app.config en tiempo de ejecución?

Respuesta

10

Resulta que puedo cambiar el archivo .config por el nuevo y hacer una ConfigurationManager.RefreshSection (...) para cada sección. Se actualizará desde el nuevo archivo .config.

2

¿Puede reiniciar la aplicación cuando detecta que necesita cambiar de archivos? Si es así, solo se trata de cambiar los archivos y reiniciar. Ahora, el truco es si .NET mantiene abierto el archivo app.config mientras se ejecuta el programa. Sospecho que no, pero si el enfoque más obvio falla, sugiero que tengas una segunda aplicación (cfgswitcher.exe) que espera el proceso con un PID especificado en la línea de comando para terminar, luego cambia los archivos de configuración y relanza el proceso original. Entonces su aplicación solo necesitaría iniciar cfgswitcher.exe (pasando su propio PID como un argumento de línea de comando) y terminar.

Como digo, vale la pena probar primero el enfoque más obvio.

EDITAR: Si no puede reiniciar la aplicación (o incluso parte de ella en un nuevo dominio de aplicación), entonces no se pueden cambiar varios aspectos de app.config (enlaces de ensamblaje, etc.). Si solo está interesado en cambiar las secciones de configuración propias de, le sugiero que las almacene en un archivo de configuración separado y las vuelva a cargar cuando lo desee.

+0

No puedo reiniciar la aplicación. – maxfridbe

0

Observe los eventos disponibles para usted en la clase ApplicationSettingsBase. Hay PropertyChanged & SettingChanging que puede darle lo que necesita.

También puede ver el archivo y, si ha cambiado, llame al método de recarga para obtener la nueva configuración.

0

No creo que sea posible cambiar la configuración en tiempo de ejecución sin reiniciar, por lo que si no puede aplicar el enfoque de Jon, debería tratar de llegar a otro enfoque.

De todos modos, tal vez es solo que yo no tengo suficiente información acerca de su situación, pero este tipo de se siente sospechoso.

¿Estás seguro de que intercambiar el archivo de configuración es la mejor manera de cumplir cualquier requisito que necesites? Quiero decir, esto es algo bastante raro. Si yo fuera usted, trataría de llegar a algún otro enfoque.

5

Microsoft .NET app.config no está diseñado para su escenario, así como muchos otros. A menudo encuentro una necesidad similar, así que me he esforzado mucho en diseñar una solución.

  1. Rediseño de usar app.config sólo como un arranque de configuración: especificar dónde encontrar el resto de los datos de configuración real. Esta información casi nunca cambia, por lo que no es necesario controlar la revisión de archivos o reinicios de la aplicación.

  2. Elija una ubicación alternativa para los datos de configuración reales: un archivo, una base de datos, tal vez incluso un servicio web. Prefiero una base de datos la mayor parte del tiempo, así que creo una tabla de configuración con una estructura simple que me permite almacenar mis datos.

  3. Implemente una biblioteca simple para envolver su acceso de configuración para que tenga una API simple para el resto de su aplicación (a través de la inyección de dependencia). Oculte el uso de app.config, así como su ubicación de almacenamiento de configuración real. Dado que .NET está fuertemente tipado, realice las configuraciones de manera que: convierta cada cadena recuperada en el tipo más específico disponible (URL, Int32, FileInfo, etc.).

  4. Determine qué parámetros de configuración se pueden cambiar con seguridad en el tiempo de ejecución en comparación con los que no. Por lo general, algunas configuraciones deben cambiar junto con otras, o simplemente no tiene sentido permitir que cambien en absoluto. Si todos sus datos de configuración pueden cambiar de manera segura en el tiempo de ejecución, entonces eso facilita las cosas, pero ESTOY en extremo en duda sobre tal escenario. Oculte la capacidad de cambio y las interdependencias de las configuraciones en la medida de lo posible.

  5. Diseñe la respuesta a la falta de disponibilidad de sus datos de configuración reales. Prefiero tratar la ausencia de cualquier configuración como un error fatal que aborta la aplicación, a menos que pueda identificar un valor predeterminado utilizable. Del mismo modo, aborto en ausencia del contenedor de almacenamiento de configuración (archivo, tabla de base de datos, etc.).

Disfruta, y mis mejores deseos.

Cuestiones relacionadas