Processing math: 100%

14 votos

¿El complemento de ArcMap con app.settings no reconoce los cambios en app.config?

He desarrollado un complemento de ArcMap que requiere un archivo de configuración. Después de pasar un tiempo tratando de leer los valores de configuración de un solo archivo App.Config (y siempre obteniendo nulo), creo que el complemento no puede leer los valores desde aquí, ya que es una biblioteca de clases, y busca el archivo de configuración de la aplicación que llama (ArcMap) cuando pido el valor de una clave (de ahí el nulo).

Para solucionar esto, utilicé un archivo App.Settings, el cual la aplicación puede leer correctamente. Al crear esto, también se introdujo un archivo App.Config en el entorno y Visual Studio parece mantener ambos archivos sincronizados durante el desarrollo.

Ahora que el complemento se está implementando, necesito poder cambiar los valores de configuración (por ejemplo, la ubicación del archivo de registro). He intentado abrir / extraer el archivo .esriaddin y actualizar el archivo App.Config allí, pero el complemento retiene los mismos valores de configuración que tenía al compilarse. Sé que los nuevos valores de App.Config se están persistiendo en el archivo .esriaddin porque puedo verlos nuevamente después de cerrar el archivo.

¿Alguien conoce una forma confiable de configurar un complemento y permitir que esta configuración sea actualizable una vez implementada? Cualquier sugerencia es bienvenida, ya que parece ridículo que necesite un archivo de configuración personalizado para esto.

Los valores de App.Settings están a nivel de aplicación, y actualmente tanto App.Settings como App.Config tienen una acción de compilación: ninguno / no copiar.

8voto

Strelok Puntos 18453

Descubrí cómo configurar el complemento.

El archivo del complemento en ...Documents\ArcGIS\AddIns\Desktop10.0... se expande cada vez que se carga ArcMap, por lo que el único lugar donde se pueden editar los archivos de configuración incrustados en el complemento es aquí. No experimenté el uso de claves del registro o un directorio de configuración dedicado para el complemento ya que esto parecía excesivo.

Al final, utilicé un archivo app.config (porque incluso si se usa con una biblioteca de clases, que ignora el archivo de configuración, sigue siendo renombrado en línea con el ensamblado e incluido automáticamente en el archivo del complemento) para mis configuraciones. Basado en un enlace proporcionado arriba, utilicé la siguiente clase de configuración

...

`public AppConfig() { try { ExeConfigurationFileMap map = new ExeConfigurationFileMap(); map.ExeConfigFilename = this.GetType().Assembly.Location + ".config"; config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); } catch (Exception) { ... } }

    private string getValue(string key) 
    {
        return config.AppSettings.Settings[key].Value;
    }` 

...

Para editar la configuración una vez que se ha implementado el complemento, tuve que cerrar ArcMap, abrir el archivo .esriAddIn con winrar, ir a \install y abrir el archivo de configuración, editarlo, cerrar el editor y luego permitir a winrar actualizar el archivo dentro del archivo. Luego, al volver a cargar ArcMap, el cambio se realiza. Irritantemente, esto fue una de las primeras cosas que intenté, pero creo que tuve problemas porque el editor del archivo de configuración aún estaba abierto cuando winrar actualizó el archivo.

6voto

saint_groceon Puntos 2696

Prestado de una respuesta similar, podrías usar esto en tu complemento:

string configPath = System.IO.Path.Combine(this.GetType().Assembly.Location,"Config.xml");

2voto

Nathan Bedford Puntos 3157

El archivo de configuración estándar de .NET es por aplicación, no por biblioteca. Esto significa que cuando su complemento se ejecuta dentro del proceso de ArcMap, su configuración debe especificarse en ArcMap.exe.config, que debe colocarse al lado de ArcMap.exe.

Por supuesto, esto no siempre es posible en un entorno de producción y también viola el aislamiento de los complementos, que es una de las razones por las que se introdujeron los complementos en primer lugar.

Necesitará almacenar sus configuraciones de manera diferente, ya sea en su propio archivo de configuración (como se sugiere en la respuesta de Kirk) o en el registro del sistema.

Puede monitorear los cambios en su archivo de configuración de varias formas, por ejemplo aprovechando la clase FileSystemWatcher.

1voto

RakeshS Puntos 203

La respuesta de Kirk Kuykendall no funcionó para mí, ya que seguía apuntando al .dll en sí. Usé lo siguiente para apuntar al archivo de configuración

System.IO.StreamReader file = new System.IO.StreamReader(System.IO.Path.GetDirectoryName(this.GetType().Assembly.Location) + "\\config.cfg");

0voto

Jonny Puntos 207

Mientras que no he revisado el nuevo modelo para los Addin de ESRI, lo que he hecho y he visto hacer a otros es el uso del UserHive en el registro. Luego puedes tener una pantalla en tu addin para actualizar la cantidad de valores que necesitas.

Usar un archivo App.config tiende a requerir reiniciar la aplicación o extensión por completo para leer nuevos valores; mientras que es más fácil hacer actualizaciones sobre la marcha desde el registro.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X