¿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
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.
¿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.
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.
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.
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.
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.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.
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.).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.
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.
- 1. ¿Cómo cambiar AndroidManifest en tiempo de ejecución?
- 2. Cambiar la orientación en tiempo de ejecución
- 3. ¿Es posible agregar ruta en tiempo de ejecución en MVC3?
- 4. ¿Es posible cambiar el ancho y la altura del diseño en Android en tiempo de ejecución?
- 5. ¿Es posible cambiar las propiedades de una referencia web en tiempo de ejecución?
- 6. ¿Es posible usar condicionalmente XPManifest en tiempo de ejecución?
- 7. ¿Es posible depurar código compilado en tiempo de ejecución?
- 8. ¿es posible anular un método en tiempo de ejecución?
- 9. ¿Cómo cambiar CurrentCulture en tiempo de ejecución?
- 10. ¿Es posible cambiar el valor de una variable durante el tiempo de ejecución?
- 11. ¿Es posible cambiar dinámicamente el espacio de nombres a ServiceContract durante el tiempo de ejecución?
- 12. ¿Cambiar dirección/puerto de WSDL EndPointAddress en tiempo de ejecución?
- 13. Cambiar fuente en tiempo de ejecución
- 14. ¿Es posible cambiar parallelOptions.MaxDegreeOfParallelism durante la ejecución de un Parallel.ForEach
- 15. Cómo cambiar sql_mode en el tiempo de ejecución
- 16. ¿Se puede cambiar el valor de configuración de ConnectionString en el tiempo de ejecución?
- 17. Cambiar la configuración regional en tiempo de ejecución en Swing
- 18. EF 5 Cambiar cadena de conexión en tiempo de ejecución
- 19. cómo cambiar los errores de tiempo de ejecución en inglés
- 20. Cómo cambiar la extensión de archivo en tiempo de ejecución
- 21. Cambiar barra de aplicaciones buttonicon en tiempo de ejecución
- 22. FederatedAuthentication.WSFederationAuthenticationModule es nulo en tiempo de ejecución
- 23. Cambiar el título de MenuItem en tiempo de ejecución
- 24. Android: cambiar el color de forma en tiempo de ejecución
- 25. Cambiar el idioma de NSLocalizedString() en tiempo de ejecución
- 26. Android - Cambiar diseño de fragmento en tiempo de ejecución
- 27. ¿Es posible especificar el paquete de servicio .NET en "supportedRuntime" en app.config?
- 28. WPF: Cómo cambiar la CurrentUICulture en tiempo de ejecución
- 29. ¿Es posible modificar un cuerpo de método en tiempo de ejecución en .NET?
- 30. Actualizar la configuración de app.config system.net en el tiempo de ejecución
No puedo reiniciar la aplicación. – maxfridbe