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

14

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

Para solucionar esto, utilicé un archivo de configuración de la aplicación, que la aplicación puede leer bien. Al crear esto, también se introduce un archivo App.Config en el entorno y Visual Studio parece mantener los dos archivos sincronizados durante el desarrollo.

Ahora que se está implementando el complemento, 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 conserva los mismos valores de configuración que tenía cuando se compiló. Sé que los nuevos valores de App.Config se están conservando en el archivo .esriaddin porque puedo verlos nuevamente después de cerrar el archivo.

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

Los valores de

App.Settings están en el nivel de la aplicación, y actualmente App.Settings y App.Config tienen acción de compilación: ninguna / no copiar.

    
pregunta tomfumb 27.04.2011 - 00:34

6 respuestas

8

Descubrí cómo configurar el complemento.

El archivo de complemento en ... Documentos \ ArcGIS \ AddIns \ Desktop10.0 ... se expande cada vez que se carga ArcMap, por lo que el único lugar donde CUALQUIER archivos de configuración incrustados en el complemento puede ser editado está aquí. No experimenté con el uso de claves de registro o el uso de un directorio de configuración de complemento dedicado, 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 ensamblaje y se incluye automáticamente en el archivo adicional) para mi configuración. Basado en un enlace proporcionado anteriormente, 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 implementado el complemento, tuve que cerrar ArcMap, abrir el archivo .esriAddIn con winrar, ir a \ instalar y abrir el archivo de configuración, editarlo, cerrar el editor y luego permitir que winrar actualice el archivo. archivo dentro del archivo. Luego, al volver a cargar ArcMap, el cambio entra. Molesto, esta es una de las primeras cosas que probé, pero creo que tuve problemas porque el editor del archivo de configuración aún estaba abierto cuando Winrar actualizó el archivo.

    
respondido por el tomfumb 27.04.2011 - 22:04
6

Tomar prestado de una respuesta similar , usted podría usar esto en tu complemento:

string configPath = System.IO.Path.Combine(this.GetType().Assembly.Location,"Config.xml");
    
respondido por el Kirk Kuykendall 27.04.2011 - 03:52
2

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

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

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

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

    
respondido por el Petr Krebs 27.04.2011 - 16:59
1

La respuesta de Kirk Kuykendall no funcionó para mí, ya que seguía apuntando al .dll en sí. . Utilicé 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");
    
respondido por el Evan Parsons 18.02.2016 - 14:59
0

Si bien no he visto el nuevo modelo de ESRI Addin, lo que he hecho y visto hacer por otros es el usuario de UserHive en el registro. Luego puede tener una pantalla en su complemento para actualizar el valor de los valores que necesita.

El uso de un archivo App.config suele requerir que reinicie la aplicación / extensión totalmente para leer nuevos valores; mientras que es más fácil hacer actualizaciones sobre la marcha desde el registro.

    
respondido por el D.E.Wright 27.04.2011 - 03:12
0

Puede intentar modificar la copia del archivo de configuración ubicado en Add-In Assembly Cache . Creo que el esriaddin solo se expande una vez por ArcGIS. Por lo tanto, es posible que no se utilicen las modificaciones posteriores (aunque debería darse cuenta de que el archivo esriaddin es más nuevo que su caché).

Vista / 7: C: \ Users \\ AppData \ Local \ ESRI \ Desktop10.0 \ AssemblyCache

XP: C: \ Documents and Settings \\ Configuración local \ Datos de aplicación \ ESRI \ Desktop10.0 \ AssemblyCache

    
respondido por el James Schek 27.04.2011 - 16:54

Lea otras preguntas en las etiquetas