Bereitstellen von ArcObject .NET-DLLs

8

Ich verwende mehrere ESRI .NET-DLLs in einigen benutzerdefinierten Python-Skripten. Zum Beispiel ESRI.ArcGIS.Geodatabase.dll

Auf meinem Entwicklungscomputer befinden sich diese DLLs im Ordner C: \ Programme (x86) \ ArcGIS \ DeveloperKit10.0 \ DotNet .

Jetzt möchte ich die Skripte auf einem anderen Computer bereitstellen. Sofern der Benutzer das ArcObjects SDK für .NET nicht installiert hat, fehlen diese DLLs auf seinem Computer.

Schlimmer noch, wenn der Benutzer das SDK installieren muss, muss er auch Visual Studio installieren, bei dem es sich um einen 600-MB-Download handelt (für die kostenlose Express-Version). Wenn sie kein Visual Studio haben, wird das ESRI-Installationsprogramm nicht fortgesetzt.

Sollten diese DLLs also mit den Skripten gebündelt werden (was zu Kompatibilitätsproblemen führen kann, wenn Service Packs hinzugefügt werden), oder gibt es eine einfachere Bereitstellungsmethode?

Update :

Die .NET-DLLs werden jetzt standardmäßig in Version 10 von ArcGIS installiert. Sie werden im GAC (Global Assembly Cache) abgelegt. Sie können sie im Windows Explorer (in Windows 7) in C:\Windows\assembly(nicht wirklich ein Ordner, aber Sie können anzeigen, was sich im GAC befindet) sehen. Ein Blick auf die Assembly-Eigenschaften zeigt an, dass sich die DLL in einem Ordner wie dem befinden sollte, C:\Windows\assembly\GAC_32\ESRI.ArcGIS.System\10.0.0.0__8fc3cc631e44ad86\ESRI.ArcGIS.System.dllaber diese Datei scheint nicht zu existieren.

Python für .NET erfordert anscheinend, dass Sie den vollständigen Namen verwenden, wenn Sie einen Verweis auf diese DLLs hinzufügen. Wenn Sie sich den Quellcode ansehen, sieht es so aus, als hätte er zuvor LoadWithPartialName verwendet, bevor Sie den folgenden Code verwenden können. Dies gibt jetzt eine FileNotFound-Ausnahme zurück.

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

Nun müssen Sie anscheinend Folgendes verwenden:

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

Antworten:

3

Sie müssen ArcObjects-DLLs überhaupt nicht bereitstellen. Sie werden im GAC installiert, was sowohl für klassische .NET-Assemblys als auch für ArcObjects-PIAs gilt.

Petr Krebs
quelle
1
Sind die PIAs im GAC installiert, wenn Sie ArcGIS Desktop 10 installieren? Oder nur wenn Sie das SDK installieren? Ich denke, .NET-Add-Ins würden ohne sie nicht funktionieren, also muss es sein, wenn Desktop installiert ist. Verwirrend, weil sie in 9.3 damit umgegangen sind - Sie mussten es mit ".NET Support" installieren, um die PIAs zu erhalten.
blah238
1
Ja, mit 10 werden sie immer mit ArcGIS Desktop installiert, ohne dass sie während der Installation angegeben werden müssen.
Petr Krebs
1
SDK installiert zusätzliche Sätze derselben Assemblys in einem eigenen Verzeichnis, damit in Visual Studio bequemer auf sie verwiesen werden kann. Zur Laufzeit lädt Ihr Code jedoch normalerweise die von GAC installierten Assemblys, es sei denn, Sie überschreiben dieses Verhalten explizit in der .NET-Konfigurationsdatei der Anwendung, z. B. ArcMap.exe.config.
Petr Krebs
Danke Petr. Nachdem ich in Python nach .NET-Dokumenten gesucht habe, sollten die Assemblys im GAC verfügbar sein, um in Python geladen zu werden. Ich kann jedoch scheinbar immer noch nicht darauf zugreifen. Ich werde mich weiter damit befassen und aktualisieren, wenn ich herausgefunden habe, warum.
Geographika
4

In 9.x können Sie ArcGIS mit .NET-Unterstützung installieren, wobei IIRC die .NET-PIAs enthält. In 10.0 müssen Sie jedoch das SDK installieren: http://support.esri.com/de/knowledgebase/techarticles/detail/34178 - Siehe @ Petrs Antwort : Die .NET-PIAs werden bei der Installation von ArcGIS Desktop 10 im GAC installiert .

Laut dieser Seite ist Visual Studio nicht erforderlich , um das ArcObjects 10 SDK zu installieren. Dies ist jedoch NICHT korrekt, da das Installationsprogramm die Fortsetzung ohne die Unterstützung einer unterstützten VS IDE verweigert.

Wenn Sie comtypes verwenden, können Sie die COM-OLBs anstelle der .NET-PIAs verwenden. Natürlich müssten Sie immer noch comtypes installieren oder mit Ihrem Skript bereitstellen (nicht sicher, wie, aber ich denke, dass dies möglich ist), aber es würde die Abhängigkeit von .NET-Assemblys beseitigen.

Siehe auch verwandte Fragen:

blah238
quelle
Dort heißt es: ArcGIS Desktop, ArcGIS Engine Runtime oder ArcGIS Server sind für die Entwicklung mit dem ArcObjects SDK erforderlich. Sie müssen auch Microsoft .NET Framework 3.5 SP1 installiert haben. Also, wenn die Entwicklung abgeschlossen ist, brauchen Sie den VS nicht, denke ich, aber Sie müssen immer noch das SDK
Hairy
Die Mischung aus .NET und Python funktioniert perfekt, daher hasse ich es, zu Comtypes zu wechseln. Leider weigert sich das SDK-Installationsprogramm, fortzufahren, es sei denn, VS befindet sich auf dem Computer.
Geographika
@geographika Sie können das SDK nicht ohne VS auf dem Computer installieren. Wenn Sie das SDK gekauft haben, können Sie eine Dummy-App erstellen, die DLLs innerhalb der Dummy-App migrieren und dann auf dem Server bereitstellen, damit sie registriert werden. Dann nutzen Sie sie so.
Haarige
Bestätigt. In der ArcGIS-Dokumentation wird angegeben, dass dies auf bestimmten Seiten nicht erforderlich ist. Das SDK-Installationsprogramm wird jedoch ohne Visual Studio 2008 Express oder Visual Studio 2010 Premium / Ult / Test / Professional NICHT durchlaufen.
Dexter
3

Sie können die DLLs nicht bündeln, da dies gegen Ihre Lizenzvereinbarung verstößt und sie in letzter Zeit sehr scharf darauf sind. Sie müssen entweder AGS 10 .NET oder ArcObjects 10 .NET SDK und natürlich Visual Studio installieren.

Wir hatten gerade unsere eigenen Probleme mit dem gleichen Problem. Wir hatten eine .NET-Toolbox auf einem AGS 10-Java-Server bereitgestellt, wobei die DLLs eingepackt waren. Wir haben einen Leckerbissen gemacht, bis uns mitgeteilt wurde, dass er gegen unsere Lizenzvereinbarung verstößt und wir die anderen Komponenten kaufen oder uns den Konsequenzen stellen müssen.

Es stinkt irgendwie, aber hey ho. Bedeutet 2 AGS 10 Lizenzen für sie, also jemand glücklich ...

Behaart
quelle
Danke für die Antwort. Zur Verdeutlichung verfügt der Benutzer über eine lizenzierte Kopie des ArcGIS-Desktops auf seinem Computer, jedoch nicht über das SDK oder Visual Studio. Gibt es keine Möglichkeit, die DLLs ohne einen 600 MB Visual Studio-Download zu installieren, der niemals verwendet wird?
Geographika
scheinbar nicht. Ich glaube, es hat sich in letzter Zeit geändert. Sie dürfen die DLLs überhaupt nicht bereitstellen, auch nicht geringfügig. Die Installation der App, die Sie erstellen, kann die DLLs nicht enthalten
Hairy
Es gibt einen Unterschied zwischen der Bereitstellung der Laufzeit-DLLs, die zum Ausführen von ArcGIS erforderlich sind (bin / gac), und den Interop-Assemblys, die zum Entwickeln von .net-Anpassungen dafür erforderlich sind (dotnet dir). Wenden Sie sich an Esri, um zu klären, was Sie in diesem Fall bereitstellen können und was nicht.
SeaJunk
Wenn Sie eine AO ​​.NET-Anwendung erstellen, müssen die entsprechenden DLLs bei der Bereitstellung gebündelt sein. Wenn auf dem Bereitstellungsserver kein ArcObjects .NET SDK vorhanden ist, müssen Sie dies lediglich tun, damit es ausgeführt werden kann. Es verstößt gegen Ihre Lizenzbedingungen, die DLLs zu bündeln. Zeitraum. Ich weiß dies als Tatsache, da wir darauf gestoßen sind und jetzt die .NET-Dienste auf Java-Dienste migrieren müssen, damit wir sie innerhalb des Lizenzierungsframeworks auf unserer ArcGIS 10 für Java-Serverinstanz
Hairy
@Behaart; Nein, Sie müssen die DLLs nicht mit Ihrem Code bündeln / bereitstellen. Wenn Sie Ihre Erweiterung korrekt erstellen, funktioniert Ihr Code mit den von GAC installierten DLLs Ihrer installierten ESRI-Software, und Sie sollten keine Probleme haben. Der Schlüssel besteht darin, die DLLs zu verwenden, um ordnungsgemäß zu referenzieren, z. B. wenn Ihre Datei web / app.config auf die GAC-Version verweist, anstatt auf eine lokale Build-Kopie der entsprechenden Bibliotheken.
DEWright
0

Warum nicht die ArcGIS Engine Runtime verwenden ? Dies ist die Laufzeit für eigenständige ArcGIS / ArcObjects-Anwendungen. Wenn Sie in Ihren Skripten keine Desktop-Benutzeroberfläche verwenden, sollte dies funktionieren?

MathiasWestin
quelle
Dies ist ebenfalls eine Lizenzverletzung. Wenn Sie die DLLs ohne Benutzeroberfläche in einer Anwendung vom Typ 'Service' verwenden, müssen Sie ein Lizenz-AGS-Server sein. Ich hatte ESRI zuvor nach der Verwendung einer Engine zum Bereitstellen einer Anwendung gefragt, aber da es sich bei der gesamten APP um eine Dienstleistung handelte, musste ich AGS lizenzieren, nicht Engine.
DEWright