Menyebarkan ArcObject. DLL NET

8

Saya menggunakan beberapa ESRI .NET DLL di beberapa skrip Python khusus. Misalnya ESRI.ArcGIS.Geodatabase.dll

Di mesin pengembangan saya, DLL ini ada di folder C: \ Program Files (x86) \ ArcGIS \ DeveloperKit10.0 \ DotNet .

Sekarang saya ingin menyebarkan skrip ke komputer lain. Namun, kecuali jika pengguna memiliki ArcObjects SDK untuk .NET yang terpasang, DLL ini tidak ada di mesin mereka.

Lebih buruk lagi, meminta pengguna menginstal SDK, berarti mereka juga perlu menginstal Visual Studio, yang merupakan unduhan 600MB (untuk versi Express gratis). Jika mereka tidak memiliki Visual Studio penginstal ESRI tidak akan melanjutkan.

Jadi haruskah DLL ini dibundel dengan skrip (yang dapat menyebabkan masalah kompatibilitas jika paket layanan ditambahkan), atau adakah metode penyebaran yang lebih mudah?

Perbarui :

DLL NET sekarang diinstal secara default di versi 10 dari ArcGIS. Mereka ditempatkan di GAC (Global Assembly Cache). Anda dapat melihatnya di Windows Explorer (di Windows 7) di C:\Windows\assembly(tidak benar-benar folder, tetapi Anda dapat melihat apa yang ada di GAC). Melihat properti rakitan menunjukkan DLL harus berada dalam folder seperti C:\Windows\assembly\GAC_32\ESRI.ArcGIS.System\10.0.0.0__8fc3cc631e44ad86\ESRI.ArcGIS.System.dlltetapi file ini sepertinya tidak ada.

Python untuk .NET tampaknya sekarang mengharuskan Anda menggunakan nama lengkap saat menambahkan referensi ke DLL ini. Melihat kode sumbernya, sepertinya itu sebelumnya menggunakan LoadWithPartialName sehingga Anda sebelum Anda dapat menggunakan kode di bawah ini. Ini sekarang mengembalikan pengecualian FileNotFound.

import clr
clr.AddReference("ESRI.ArcGIS.System")
from ESRI.ArcGIS.System import *

Sekarang sepertinya Anda perlu menggunakan yang berikut ini:

import clr
clr.AddReference("ESRI.ArcGIS.System, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86")
from ESRI.ArcGIS.System import *
geografi
sumber

Jawaban:

3

Anda tidak perlu menggunakan DLL ArcObjects sama sekali. Mereka diinstal di GAC, yang berlaku untuk kedua rakitan .NET klasik serta PIA ArcObjects.

Petr Krebs
sumber
1
Apakah PIA dipasang di GAC ketika Anda menginstal ArcGIS Desktop 10? Atau hanya ketika Anda menginstal SDK? Saya kira .NET add-in tidak akan berfungsi tanpanya sehingga harus saat Desktop diinstal. Membingungkan karena bagaimana mereka menanganinya di 9.3 - Anda harus menginstalnya dengan ".NET Support" untuk mendapatkan PIA.
blah238
1
Ya, pada usia 10, mereka selalu diinstal dengan ArcGIS Desktop tanpa perlu menentukannya selama instalasi.
Petr Krebs
1
SDK menginstal set tambahan rakitan yang sama ke direktori sendiri sehingga mereka dapat lebih mudah dirujuk di Visual Studio. Saat runtime, kode Anda biasanya memuat rakitan yang diinstal GAC, kecuali jika Anda secara eksplisit menimpa perilaku ini dalam aplikasi. File konfigurasi NET, misalnya ArcMap.exe.config.
Petr Krebs
Terima kasih Petr. Setelah melihat melalui Python untuk. Net docs, majelis di GAC harus tersedia untuk memuat ke Python, namun saya masih tidak bisa mengaksesnya - saya akan mencari lebih jauh dan memperbarui ketika saya tahu mengapa.
geografi
4

Di 9.x, Anda dapat menginstal ArcGIS dengan dukungan .NET yang IIRC menyertakan .NET PIA, namun dalam 10.0 Anda harus menginstal SDK: http://support.esri.com/en/knowledgebase/techarticles/detail/34178 - Lihat jawaban @ Petr , .NET PIA diinstal ke GAC saat Anda menginstal ArcGIS Desktop 10 .

Menurut halaman ini , Visual Studio tidak diharuskan untuk menginstal ArcObjects 10 SDK - tetapi itu TIDAK benar karena installer menolak untuk melanjutkan tanpa VS IDE yang didukung terpasang.

Jika Anda menggunakan comtypes, Anda bisa menggunakan COM OLBs daripada .NET PIAs. Tentu saja Anda masih harus menginstal comtypes atau menyebarkannya dengan skrip Anda (tidak yakin bagaimana tetapi saya pikir itu bisa dilakukan), tetapi itu akan menghilangkan ketergantungan .NET assembly.

Lihat juga pertanyaan terkait:

blah238
sumber
Ini menyatakan di sana: ArcGIS Desktop, ArcGIS Engine Runtime atau ArcGIS Server diperlukan untuk dikembangkan dengan ArcObjects SDK. Anda juga harus menginstal Microsoft .NET Framework 3.5 SP1. JADI, jika pengembangan dilakukan, Anda tidak perlu VS, saya kira, tetapi Anda masih perlu menggunakan SDK
Hairy
Campuran dari .NET dan Python berfungsi dengan baik, jadi saya tidak suka untuk pindah ke tipe-tipe. Sayangnya penginstal SDK menolak untuk melanjutkan kecuali VS ada di mesin.
geografisika
@geographika Anda tidak dapat menginstal SDK tanpa VS pada mesin. Cara terbaik untuk ini, jika Anda telah membeli SDK, adalah membuat aplikasi 'dummy' dan memigrasi dll dalam aplikasi dummy, kemudian menyebarkannya ke server, sehingga mereka terdaftar. Kemudian manfaatkan mereka seperti itu.
Berbulu
Dikonfirmasi Dokumentasi ArcGIS menyatakan tidak diperlukan di halaman tertentu. Tetapi pemasang SDK TIDAK AKAN MELALUI tanpa Visual Studio 2008 Express, atau Visual Studio 2010 premium / ult / test / professional.
Dexter
3

Anda tidak dapat membundel dll karena itu melanggar perjanjian lisensi Anda dan mereka baru-baru ini sangat kesal. Anda juga perlu menginstal AGS 10 .NET, atau ArcObjects 10 .NET SDK, dan, jelas, Visual Studio.

Kami baru saja mengalami masalah kami sendiri di sekitar masalah yang sama. Kami telah menggunakan .NET toolbox pada server AGS 10 Java, dengan dll. Berhasil, sampai kami diberitahu itu melanggar perjanjian lisensi kami dan kami harus membeli komponen lain atau menghadapi konsekuensinya.

Agak bau, tapi hei ho. Berarti 2 AGS 10 lisensi untuk mereka, jadi seseorang senang ...

Berbulu
sumber
Terima kasih atas jawabannya. Untuk memperjelas pengguna memiliki salinan desktop ArcGIS berlisensi pada mesin mereka, tetapi tidak pada SDK atau Visual Studio. Apakah tidak ada opsi untuk menginstal DLL tanpa unduhan Visual Studio 600MB yang tidak akan pernah digunakan?
geografisika
Sepertinya tidak. Saya percaya itu berubah belakangan ini. Anda tidak diperbolehkan menggunakan dll sama sekali, bahkan tidak sedikit; instalasi aplikasi yang Anda buat, tidak dapat memuat dll.
Hairy
Ada perbedaan antara menggunakan dll runtime yang diperlukan untuk menjalankan ArcGIS (bin / gac) dan rakitan interop yang diperlukan untuk mengembangkan kustomisasi .net untuk itu (dotnet dir). Hubungi Esri untuk klarifikasi tentang apa yang bisa dan tidak bisa Anda sebarkan dalam kasus ini.
SeaJunk
Jika Anda membangun aplikasi AO .NET, Anda harus memiliki dll yang relevan, dibundel dengannya saat penerapan, jika tidak ada ArcObjects .NET SDK di server penempatan, Anda hanya perlu melakukannya, agar dapat menjalankannya. Adalah melanggar persyaratan lisensi Anda untuk bundel dll. Titik. Saya tahu ini, sebagai fakta, seperti yang kita temui dan sekarang harus memigrasi layanan NET., Untuk layanan Java, sehingga kita dapat menjalankannya, dalam kerangka lisensi, pada ArcGIS 10 kami untuk contoh server Java
Hairy
@Berbulu; tidak, Anda tidak perlu membundel / menggunakan DLL dengan kode Anda. Jika Anda membangun ekstensi dengan benar, kode Anda akan berfungsi dengan DLL yang diinstal GAC dari perangkat lunak yang diinstal ESRI Anda dan Anda seharusnya tidak memiliki masalah. Kuncinya adalah menggunakan DLL untuk referensi dengan benar, seperti membuat file web / app.config Anda merujuk ke versi GAC alih-alih salinan build lokal dari perpustakaan yang sesuai.
DEWright
0

Mengapa tidak menggunakan ArcGIS Engine Runtime ? Ini adalah runtime untuk aplikasi ArcGIS / ArcObjects mandiri. Jika Anda tidak menggunakan hal-hal Desktop UI apa pun dalam skrip Anda, apakah itu berfungsi?

MathiasWestin
sumber
Ini juga merupakan pelanggaran lisensi, jika Anda menggunakan DLL tanpa UI dalam jenis aplikasi 'Layanan' maka Anda harus menjadi lisensi Server AGS. Saya sebelumnya telah meminta ESRI tentang menggunakan Mesin untuk menyebarkan aplikasi tetapi karena keseluruhan aplikasi adalah Layanan yang saya perlukan untuk melisensikan AGS, bukan Engine.
DEWright