Triển khai các tệp .NET ArcObject .NET


8

Tôi đang sử dụng một số tệp .NET ESRI trong một số tập lệnh Python tùy chỉnh. Ví dụ: ESRI.ArcGIS.Geodatabase.dll

Trên máy phát triển của tôi, các DLL này nằm trong thư mục C: \ Program Files (x86) \ ArcGIS \ DeveloperKit10.0 \ DotNet .

Bây giờ tôi muốn triển khai các kịch bản cho một máy khác. Tuy nhiên, trừ khi người dùng có SDK ArcObjects cho .NET được cài đặt, các DLL này bị thiếu trong máy của họ.

Tệ hơn nữa, yêu cầu người dùng cài đặt SDK, có nghĩa là họ cũng cần cài đặt Visual Studio, đây là bản tải xuống 600 MB (đối với phiên bản Express miễn phí). Nếu họ không có Visual Studio, trình cài đặt ESRI sẽ không tiếp tục.

Vì vậy, các DLL này có nên được gói cùng với các tập lệnh (có thể gây ra sự cố tương thích nếu gói dịch vụ được thêm vào) hoặc có phương pháp triển khai dễ dàng hơn không?

Cập nhật :

Các DLL .NET hiện được cài đặt theo mặc định trong phiên bản 10 của ArcGIS. Chúng được đặt trong GAC (Global hội Cache). Bạn có thể thấy chúng trong Windows Explorer (trong Windows 7) trong C:\Windows\assembly(không thực sự là một thư mục, nhưng bạn có thể xem những gì trong GAC). Nhìn vào các thuộc tính lắp ráp cho thấy DLL phải nằm trong một thư mục như C:\Windows\assembly\GAC_32\ESRI.ArcGIS.System\10.0.0.0__8fc3cc631e44ad86\ESRI.ArcGIS.System.dllnhưng tệp này dường như không tồn tại.

Python cho .NET dường như bây giờ yêu cầu bạn sử dụng tên đầy đủ khi thêm một tham chiếu đến các DLL này. Nhìn vào mã nguồn của nó, có vẻ như trước đây nó đã sử dụng LoadWithPartialName để bạn có thể sử dụng mã dưới đây. Điều này bây giờ trả về một ngoại lệ FileNotFound.

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

Bây giờ có vẻ như bạn cần sử dụng như sau:

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

Câu trả lời:


3

Bạn không cần phải triển khai DLL ArcObjects. Chúng được cài đặt trong GAC, điều này đúng cho cả các cụm .NET cổ điển cũng như PIA của ArcObjects.


1
Các PIA có được cài đặt trong GAC khi bạn cài đặt ArcGIS Desktop 10 không? Hay chỉ khi bạn cài đặt SDK? Tôi đoán các add-in .NET sẽ không hoạt động nếu không có chúng vì vậy nó phải là khi Desktop được cài đặt. Nhầm lẫn vì cách họ xử lý nó trong 9.3 - bạn phải cài đặt nó với "Hỗ trợ .NET" để có được PIA.
blah238

1
Có, ở tuổi 10, chúng luôn được cài đặt với ArcGIS Desktop mà không cần chỉ định chúng trong khi cài đặt.
Petr Krebs

1
SDK cài đặt tập hợp bổ sung của các hội đồng tương tự vào thư mục riêng để chúng có thể được tham chiếu thuận tiện hơn trong Visual Studio. Tuy nhiên, trong thời gian chạy, mã của bạn thường tải các cụm được cài đặt GAC, trừ khi bạn ghi đè rõ ràng hành vi này trong tệp cấu hình .NET của ứng dụng, ví dụ ArcMap.exe.config.
Petr Krebs

Cảm ơn Petr. Sau khi xem qua các tài liệu Python cho .Net, các tập hợp trong GAC sẽ có sẵn để tải vào Python, tuy nhiên tôi dường như không thể truy cập chúng - tôi sẽ xem xét thêm và cập nhật khi tôi tìm hiểu tại sao.
geographika

4

Trong 9.x, bạn có thể cài đặt ArcGIS với hỗ trợ .NET, trong đó IIRC bao gồm .NET PIAs, tuy nhiên , trong 10.0, bạn phải cài đặt SDK: http://support.esri.com/en/ledgeledridease/techarticles/detail 432178 - Xem câu trả lời của @ Petr , .NET PIA được cài đặt vào GAC khi bạn cài đặt ArcGIS Desktop 10 .

Theo trang này , Visual Studio không bắt buộc phải cài đặt SDK 10 ArcObjects - nhưng điều đó KHÔNG chính xác vì trình cài đặt từ chối tiếp tục mà không cài đặt VS IDE được hỗ trợ.

Nếu bạn sử dụng comtypes, bạn có thể sử dụng COM OLB thay vì .NET PIA. Tất nhiên bạn vẫn sẽ phải cài đặt comtypes hoặc triển khai nó với tập lệnh của mình (không biết làm thế nào nhưng tôi nghĩ nó có thể được thực hiện), nhưng nó sẽ loại bỏ sự phụ thuộc lắp ráp .NET.

Xem thêm các câu hỏi liên quan:


Nó tuyên bố trong đó: ArcGIS Desktop, ArcGIS Engine Runtime hoặc ArcGIS Server được yêu cầu phát triển với SDK ArcObjects. Bạn cũng phải cài đặt Microsoft .NET Framework 3.5 SP1. Vì vậy, nếu quá trình phát triển hoàn tất, bạn không cần VS tôi đoán, nhưng bạn vẫn cần triển khai SDK
Hairy

Sự pha trộn của .NET và Python đang hoạt động hoàn hảo, vì vậy tôi rất muốn chuyển sang comtypes. Thật không may, trình cài đặt SDK từ chối tiếp tục trừ khi VS có trên máy.
geographika

@geographika bạn không thể cài đặt SDK mà không có VS trên máy. Một cách khác, nếu bạn đã mua SDK, là tạo một ứng dụng 'giả' và di chuyển các dll trong ứng dụng giả, sau đó triển khai nó đến máy chủ, để chúng được đăng ký. Sau đó sử dụng chúng như thế.
Lông

Đã xác nhận. Tài liệu ArcGIS nói rằng nó không bắt buộc trong một số trang nhất định. Nhưng trình cài đặt SDK SILL KHÔNG ĐI QUA mà không có Visual Studio 2008 Express, hoặc Visual Studio 2010 premium / ult / test / Professional.
Dexter

3

Bạn không thể bó dll vì điều đó trái với thỏa thuận cấp phép của bạn và gần đây họ đã rất đánh hơi về nó. Bạn cần phải cài đặt AGS 10 .NET hoặc ArcObjects 10 .NET SDK và rõ ràng là Visual Studio.

Chúng ta vừa có những vấn đề của riêng mình xung quanh cùng một vấn đề. Chúng tôi đã triển khai một hộp công cụ .NET trên máy chủ Java AGS 10, với các dll được gói lại. Đã thực hiện một điều trị, cho đến khi chúng tôi được thông báo rằng nó vi phạm thỏa thuận cấp phép của chúng tôi và chúng tôi sẽ phải mua các thành phần khác hoặc đối mặt với hậu quả.

Đó là loại hôi thối, nhưng hey ho. Có nghĩa là 2 giấy phép AGS 10 cho họ, vì vậy một số người hạnh phúc ...


Cảm ơn câu trả lời. Để làm rõ người dùng có một bản sao ArcGIS được cấp phép trên máy của họ, nhưng không phải SDK hoặc Visual Studio. Không có tùy chọn để cài đặt DLL mà không cần tải xuống Visual Studio 600 MB sẽ không bao giờ được sử dụng?
geographika

Rõ ràng là không. Tôi tin rằng nó đã thay đổi gần đây. Bạn không được phép triển khai các dlls, thậm chí không một chút; việc cài đặt ứng dụng bạn xây dựng, không thể chứa các dlls
Hairy

Có một sự khác biệt giữa việc triển khai dll thời gian chạy cần thiết để chạy ArcGIS (bin / gac) và các cụm interop cần thiết để phát triển các tùy chỉnh .net cho nó (dotnet dir). Liên hệ với Esri để làm rõ về những gì bạn có thể và không thể triển khai trong trường hợp này.
SeaJunk

Nếu bạn xây dựng một ứng dụng AO .NET, bạn phải có các dll liên quan, đi kèm với nó khi triển khai, nếu không có ArcObjects .NET SDK trên máy chủ triển khai, bạn chỉ cần thực hiện nó để thực thi. Nó là trái với điều kiện cấp phép của bạn để bó các dlls. Giai đoạn = Stage. Tôi biết điều này, thực tế, khi chúng tôi bắt gặp nó và hiện đang phải di chuyển các dịch vụ .NET, sang các dịch vụ Java, vì vậy chúng tôi có thể chạy chúng, trong khung cấp phép, trên cá thể máy chủ ArcGIS 10 của chúng tôi
Hairy

@Herry; không, bạn không cần phải bó / triển khai các DLL với mã của mình. Nếu bạn xây dựng tiện ích mở rộng của mình một cách chính xác, mã của bạn sẽ hoạt động với các DLL được cài đặt GAC từ phần mềm đã cài đặt ESRI của bạn và bạn sẽ không gặp vấn đề gì. Khóa của họ đang sử dụng các DLL để tham chiếu đúng cách, như có tệp web / app.config của bạn tham chiếu phiên bản GAC thay vì bản sao xây dựng cục bộ của các thư viện thích hợp.
DEWright

0

Tại sao không sử dụng ArcGIS Engine Runtime ? Đó là thời gian chạy cho các ứng dụng ArcGIS / ArcObjects độc lập. Nếu bạn không sử dụng bất kỳ nội dung UI UI nào trong tập lệnh thì nó có hoạt động không?


Đây cũng là một vi phạm giấy phép, nếu bạn đang sử dụng DLL mà không có UI trong loại ứng dụng 'Dịch vụ' thì bạn phải cấp phép AGS Server. Trước đây tôi đã hỏi ESRI về việc sử dụng Engine để triển khai một ứng dụng nhưng vì APP tổng thể là một Dịch vụ tôi cần để cấp phép cho AGS chứ không phải Engine.
DEWright
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.