/ / Funcionamiento interno de .NET: ¿se puede incorporar el cargador de configuración incorporado por código? - .net, inicio, configuración de la aplicación, my.settings

Funcionamiento interno de .NET: ¿se puede integrar el cargador de configuraciones al que se accede mediante un código? - .net, inicio, configuración de la aplicación, my.settings

Me uní a un proyecto donde está usando la aplicación .NET Windows Forms Mecanismo de ajustes (Proyecto > Propiedades > Configuraciones) para preservar tanto la configuración del usuario como la configuración de la aplicación. He creado la herramienta de línea de comandos que utiliza LoadAssembly(<main application EXE file>) Para realizar algunas funcionalidades de la aplicación principal. Al invocar los métodos de la aplicación principal, todo funciona bien. excepto cuando se trata de ajustes - por supuesto, porque no se cargaron - se saltó el cargador de configuraciones.

Pero la aplicación se basa en gran medida en la configuración, por lo que debo llamar explícitamente a ese cargador de configuración. Pero no puedo encontrarlo: he analizado todos los archivos del proyecto .NET en blanco con Configuraciones añadido y la rutina de carga no está en ninguna parte para encontrar.

Creo que en el peor de los casos puedo solucionar el problema e implementar

  • localizando el archivo de configuración
  • carga explícita de su contenido

pero no me gusta reinventar la rueda y, sobre todo, no me gusta el manejo no transparente de la carga de ajustes en la plataforma .NET.
¿Hay alguna forma de invocar el código incorporado utilizado por .NET Framework para cargar? My.Settings en la puesta en marcha de la aplicación?

Nota: La aplicación está escrita en VB.NET pero creo que para C # la cosa es la misma, así que no dude en presentar la forma de pensar de C #, si así lo desea.

Respuestas

0 para la respuesta № 1

Recientemente he encontrado, de manera predeterminada, cómo se manejan los ajustes No permite ni soporta mi escenario. Evaluación de

ConfigurationManager.OpenExeConfiguration( ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath

da directorio de diferentes configuraciones locales cuando se invoca desde la aplicación original y cuando se invoca desde el ensamblaje cargado. Compara salidas del mismo método:

Cuando se llama directamente:

C:UsersMiroxlavAppDataLocalWindowsApplication1WindowsApplicationSetting_Url_za1afclumj0mqqjsghdpysdumjr5jd211.0.0.0user.config

Cuando se llama como parte del ensamblado cargado invocado desde otra aplicación:

C:UsersMiroxlavAppDataLocalWindowsApplication1TestWindowsApplicationSet_Url_cxikfslvgbja50yw4lvnvugko41ou5jz1.0.0.0user.config

Asi que con proveedor de configuraciones por defecto Incluso la ubicación del archivo de configuración no se puede determinar directamente. Básicamente, esto invalida todos los posibles pasos subsiguientes de recuperación directa de My.Settings del ensamblaje cargado (sin archivos de ayuda, soluciones adicionales que utilizan configuraciones fijas, etc., manteniendo el proveedor de configuraciones por defecto)

La salida puede ser escribir. proveedor de configuraciones personalizadas que almacena la configuración en una ubicación de acceso universal, aunque es mucho más elevado de lo que esperaba encontrar.

Actualizar: Como solución rápida, he implementado el archivo de ayuda para guardar la ubicación de configuración al inicio de la aplicación principal. Cuando el código de la aplicación principal se inicia como un ensamblaje cargado, restaurando Mi configuración del archivo de configuración encontrado en la ubicación guardada en el archivo de ayuda.


-1 para la respuesta № 2

System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration (ConfigurationUserLevel.None);