ESRI ArcMap Add-in Config.esriaddinx

8

Saya sedang dalam proses mengubah ekstensi ArcMap yang lebih lama ke Add-In di C # dan saya mencoba mengambil manfaat terbaik dari konfigurasi berbasis XML.

Config.esriaddinx berfungsi dengan baik untuk pengaturan dasar (bilah alat, tombol, info ekstensi, dll), tetapi apakah ada cara untuk menambahkan parameter konfigurasi lainnya, seperti nama bidang, nama layer, koneksi basis data, dll?

Apakah saya perlu membuat file App.config? Jika demikian, apakah file App.config masih dikemas / digunakan sama dengan sisa add-in? Apa yang akan menjadi metode terbaik untuk membaca parameter? Saya seorang pemula untuk menambahkan dan saran atau sampel akan sangat dihargai. Terima kasih!

petegis
sumber

Jawaban:

4

Pertama, saya belum mencoba menggunakan Config.esriaddinx untuk tujuan ini, tetapi saya tidak akan merekomendasikannya. Ini dimaksudkan untuk konfigurasi add-in itu sendiri, belum tentu data pengguna, dan Anda mungkin tidak ingin mencampur keduanya.

Sudah lama sejak saya sudah berurusan dengan ini sendiri jadi saya mungkin sedikit kabur pada detail, tetapi ada beberapa masalah dengan menggunakan file konfigurasi di ArcGIS add-in: ArcMap Add-in dengan app.settings tidak mengenali aplikasi perubahan .config?

Secara khusus, direktori add-in yang diekstraksi akan ditimpa setiap kali aplikasi dimulai, sehingga Anda tidak dapat benar-benar bertahan terhadap perubahan pada pengaturan di sana. Jika pengaturan Anda tidak pernah berubah atau hanya berubah dengan setiap versi baru add-in Anda, maka ini mungkin bukan masalah.

Namun, jika Anda ingin membuat add-in Anda dapat dikonfigurasi oleh pengguna akhir maka Anda perlu menyimpan informasi yang dapat dikonfigurasi pengguna di tempat lain sehingga mereka tidak ditimpa. Saya sarankan menggunakan folder Data Aplikasi pengguna , yang jalurnya dapat Anda tentukan secara terprogram seperti:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

Saya juga menyarankan untuk meletakkannya di subfolder yang dinamai add-in Anda. Tetapi pada dasarnya Anda akan memuat dari dan menyimpan ke file di lokasi itu alih-alih membaca pengaturan dari kelas add-in Anda Settingsatau file konfigurasi di direktori add-in. Jika Anda ingin menggunakan konfigurasi .NET untuk ini maka saya sarankan membaca di Pengaturan Aplikasi dan ConfigurationManager.

Masalah lain yang saya miliki adalah dengan menggunakan bagian konfigurasi khusus saat menggunakan konfigurasi .NET. Menggunakan Assembly.LoadFromdan menanganiAssemblyResolve acara adalah solusi untuk masalah khusus itu, meskipun dalam kasus itu saya akhirnya tidak menggunakan konfigurasi .NET untuk itu dan alasan lain.

Bergantung pada kompleksitas skenario konfigurasi Anda, Anda dapat, seperti yang saya lakukan, menghindari menggunakan sistem konfigurasi .NET sepenuhnya dan sebagai gantinya menggunakan beberapa metode lain membaca dan menulis informasi konfigurasi. Saya akhirnya menggunakan SerializableAttributekelas-kelas atau kelas-kelas yang diimplementasikan IXmlSerializableuntuk tujuan ini di salah satu add-in yang lebih kompleks yang saya buat yang mencakup pengaturan yang dapat dikonfigurasi pengguna seperti daftar lapisan, pengaturan koneksi, dll. Saya akan merekomendasikan membaca Serialisasi Objek di. NET , Memperkenalkan Serialisasi XML dan Bagaimana Menerapkan IXmlSerializable dengan Benar jika Anda tertarik pada pendekatan itu.

Kedengarannya seperti milik Anda adalah sepanjang baris yang sama sehingga terserah Anda, tetapi saya menemukan pendekatan serialisasi XML lebih disukai untuk konfigurasi NET untuk semua kecuali skenario konfigurasi yang paling sederhana (tipe data sederhana, tidak ada hierarki / koleksi).

blah238
sumber
Info hebat di sini, @ blah238! Saya akan menghapus opsi ini dan melihat apa yang akan bekerja paling baik.
petegis
Bagaimana Anda menyebarkan file xml ke folder Environment.SpecialFolder.ApplicationData ketika Anda mendistribusikan file addin ke pengguna Anda? Apakah ini kasus menyalin / menempel file secara manual?
Vidar
1

Buat file config.xml dan atur build action-nya ke AddInContent di bawah properti VS untuk file tersebut.

Untuk menambahkan ini berdasarkan komentar, karena Anda melakukannya di C # Saya berasumsi Anda menggunakan Visual Studio untuk membuat addin Anda. Dari sana jika Anda menambahkan file konfigurasi XML dari opsi baru file dan beri nama config.xml itu akan membuat file kosong default. Dari sana Anda dapat menentukan nilai kunci pengaturan xml di bawah tag appSettings sama dengan file konfigurasi xml normal dan kemudian merujuk ke ini dari kode seperti biasa. Untuk mengubah build itu tindakan, ketika Anda memiliki file yang dipilih dalam VS, lihat jendela properti dan harus ada pengaturan build action. Pilih ini dan itu akan menampilkan drop down dari opsi yang tersedia, pilih AddInContent dari daftar.

Dave Timmins
sumber
1
Selamat datang di GISse. Ini jawaban yang sangat singkat. Ini akan membantu untuk memasukkan beberapa detail lebih lanjut, mungkin menggabungkan beberapa detail yang disebutkan @petegis, seperti cara menambahkan parameter tertentu ke file ini. Juga, bagaimana Anda membuat file ini? Apakah ini dilakukan melalui ArcMap, atau dalam editor teks? Apa struktur yang tepat? Pikirkan jika Anda belum pernah membuatnya sebelumnya, apa yang perlu Anda ketahui agar berhasil melakukannya. Informasi semacam itu akan menjadi jawaban yang luar biasa. Awal yang bagus!
Dapatkan Spasial
Terima kasih @davetimmins. Tampaknya cukup mudah, saya memberikan suntikan ini dan berfungsi selama file tersebut tidak benar-benar bernama "config.xml" (melempar kesalahan build "Tidak dapat membuat file ketika file itu sudah ada").
petegis