Complemento ESRI ArcMap Config.esriaddinx

8

Estoy en el proceso de convertir una extensión de ArcMap anterior a un complemento en C # y estoy tratando de aprovechar mejor la configuración basada en XML.

Config.esriaddinx funciona muy bien para la configuración básica (barra de herramientas, botones, información de extensión, etc.), pero ¿hay alguna manera de agregar otros parámetros de configuración, como nombres de campo, nombres de capas, conexiones de bases de datos, etc.?

¿Necesitaría crear un archivo App.config? Si es así, ¿el archivo App.config todavía se empaquetará / implementará igual que el resto del complemento? ¿Cuál sería el mejor método para leer los parámetros? Soy un novato en complementos y cualquier sugerencia o muestra sería muy apreciada. ¡Gracias!

petegis
fuente

Respuestas:

4

En primer lugar, no he intentado usar Config.esriaddinx para este propósito, pero no lo recomendaría. Está destinado a la configuración del complemento en sí, no necesariamente a los datos del usuario, y probablemente no desee mezclar los dos.

Ha pasado un tiempo desde que me ocupé de esto, así que puedo ser un poco confuso con los detalles, pero hay varios problemas con el uso de archivos de configuración en los complementos de ArcGIS: ArcMap Add-in con app.settings no reconoce la aplicación .config cambios?

En particular, el directorio en el que se extrae el complemento se sobrescribe cada vez que se inicia la aplicación, por lo que realmente no puede persistir los cambios en la configuración allí. Si su configuración nunca cambia o solo cambia con cada nueva versión de su complemento, entonces esto probablemente no sea una preocupación.

Sin embargo, si desea hacer que su complemento sea configurable por el usuario final, entonces necesita almacenar la información configurable por el usuario en otro lugar para que no se sobrescriba. Sugeriría usar la carpeta de Datos de aplicación del usuario , cuya ruta puede determinar mediante programación de la siguiente manera:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

También sugeriría ponerlo en una subcarpeta con el nombre de su complemento. Pero esencialmente estaría cargando y guardando en un archivo en esa ubicación en lugar de leer la configuración de la Settingsclase de su complemento o el archivo de configuración en el directorio del complemento. Si desea utilizar la configuración .NET para esto, le sugiero que lea la Configuración de la aplicación y ConfigurationManager.

El otro problema que he tenido es usar secciones de configuración personalizadas cuando uso la configuración .NET. Usar Assembly.LoadFromy manejar elAssemblyResolve evento fue la solución a ese problema en particular, aunque en ese caso terminé sin usar la configuración .NET por esa y otras razones.

Dependiendo de la complejidad de su escenario de configuración, podría, como lo hice, evitar el uso del sistema de configuración .NET por completo y en su lugar utilizar algún otro método para leer y escribir información de configuración. Terminé usando SerializableAttributeclases marcadas o clases que se implementaron IXmlSerializablepara este propósito en uno de los complementos más complejos que creé, que incluía configuraciones configurables por el usuario, como listas de capas, configuraciones de conexión, etc. Recomendaría leer la serialización de objetos en. NET , presentando la serialización XML y cómo implementar IXmlSerializable correctamente si está interesado en ese enfoque.

Parece que el suyo está en la misma línea, por lo que depende de usted, pero descubrí que el enfoque de serialización XML es preferible a la configuración de .NET para todos los escenarios de configuración, excepto los más simples (tipos de datos simples, sin jerarquías / colecciones).

blah238
fuente
Gran información aquí, @ blah238! Explicaré estas opciones y veré qué funciona mejor.
petegis
¿Cómo implementa el archivo xml en la carpeta Environment.SpecialFolder.ApplicationData cuando distribuye el archivo de complemento a sus usuarios? ¿Es un caso de copiar / pegar manualmente el archivo?
Vidar
1

Cree un archivo config.xml y establezca su acción de compilación en AddInContent en las propiedades VS del archivo.

Para agregar a esto según el comentario, ya que lo está haciendo en C #, estaba asumiendo que está usando Visual Studio para crear su complemento. A partir de ahí, si agrega un archivo de configuración XML desde la nueva opción del archivo y lo nombra config.xml, creará un archivo vacío predeterminado. Desde allí, puede especificar la configuración xml del valor clave en la etiqueta AppSettings de la misma manera que un archivo de configuración xml normal y luego hacer referencia a estos desde el código como lo haría normalmente. Para cambiar su acción de compilación, cuando haya seleccionado el archivo en VS, mire la ventana de propiedades y debería haber una configuración de acción de compilación. Seleccione esto y se mostrará un menú desplegable de las opciones disponibles, elija AddInContent de la lista.

Dave Timmins
fuente
1
Bienvenido a GISse. Esta es una respuesta muy breve. Sería útil incluir más detalles, tal vez incorporando algunos de los detalles que @petegis mencionó, como cómo agregar parámetros particulares a este archivo. Además, ¿cómo harías para crear este archivo? ¿Se hace a través de ArcMap o en un editor de texto? ¿Cuál es la estructura adecuada? Piense si nunca antes hubiera creado uno, qué necesitaría saber para hacerlo con éxito. Ese tipo de información será una excelente respuesta. ¡Buen comienzo!
Obtenga espacial
Gracias @davetimmins. Parece bastante sencillo, le di una oportunidad a esto y funciona siempre y cuando el archivo no se llame realmente "config.xml" (arroja un error de compilación "No se puede crear un archivo cuando ese archivo ya existe").
petegis