Implantando DLLs do ArcObject .NET

8

Estou usando várias DLLs do ESRI .NET em alguns scripts Python personalizados. Por exemplo ESRI.ArcGIS.Geodatabase.dll

Na minha máquina de desenvolvimento, essas DLLs estão na pasta C: \ Arquivos de Programas (x86) \ ArcGIS \ DeveloperKit10.0 \ DotNet .

Agora, desejo implantar os scripts em outra máquina. No entanto, a menos que o usuário tenha o ArcObjects SDK para .NET instalado, essas DLLs estão ausentes na máquina.

Pior ainda, solicitar que o usuário instale o SDK significa que ele também precisa instalar o Visual Studio, que é um download de 600 MB (para a versão gratuita do Express). Se eles não tiverem o Visual Studio, o instalador da ESRI não continuará.

Portanto, essas DLLs devem ser agrupadas com os scripts (que podem causar problemas de compatibilidade se forem adicionados service packs) ou existe um método de implantação mais fácil?

Atualização :

As DLLs do .NET agora estão instaladas por padrão na versão 10 do ArcGIS. Eles são colocados no GAC (Global Assembly Cache). Você pode vê-los no Windows Explorer (no Windows 7) em C:\Windows\assembly(não é realmente uma pasta, mas é possível ver o que está no GAC). Examinar as propriedades do assembly indica que a DLL deve estar em uma pasta como, C:\Windows\assembly\GAC_32\ESRI.ArcGIS.System\10.0.0.0__8fc3cc631e44ad86\ESRI.ArcGIS.System.dllmas esse arquivo parece não existir.

O Python para .NET parece exigir agora que você use o nome completo ao adicionar uma referência a essas DLLs. Observando o código fonte, parece que ele usou o LoadWithPartialName anteriormente para que você possa usar o código abaixo. Isso agora retorna uma exceção FileNotFound.

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

Agora parece que você precisa usar o seguinte:

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

Respostas:

3

Você não precisa implantar as DLLs do ArcObjects. Eles são instalados no GAC, o que vale tanto para assemblies .NET clássicos quanto para PIAs do ArcObjects.

Petr Krebs
fonte
1
Os PIAs estão instalados no GAC quando você instala o ArcGIS Desktop 10? Ou apenas quando você instala o SDK? Eu acho que os suplementos do .NET não funcionariam sem eles, portanto deve ser quando o Desktop estiver instalado. Confuso por causa de como eles lidaram com isso na 9.3 - você teve que instalá-lo com o "Suporte .NET" para obter os PIAs.
blah238
1
Sim, aos 10 anos, eles sempre são instalados com o ArcGIS Desktop sem necessidade de especificá-los durante a instalação.
Petr Krebs
1
O SDK instala conjunto adicional dos mesmos assemblies em seu próprio diretório para que eles possam ser mais convenientemente referenciados no Visual Studio. No entanto, em tempo de execução, seu código normalmente carrega os assemblies instalados pelo GAC, a menos que você substitua explicitamente esse comportamento no arquivo de configuração .NET do aplicativo, por exemplo, ArcMap.exe.config.
Petr Krebs
Obrigado Petr. Depois de examinar os documentos em .Net do Python para .Net, os assemblies no GAC devem estar disponíveis para carregar no Python, mas ainda não consigo acessá-los - analisarei mais detalhadamente e atualizarei quando descobrir o porquê.
geographika
4

Na 9.x, você pode instalar o ArcGIS com suporte ao .NET, o qual o IIRC incluiu os PIAs do .NET. No entanto , na 10.0, é necessário instalar o SDK: http://support.esri.com/en/knowledgebase/techarticles/detail/34178 - Consulte a resposta de @ Petr , os PIAs .NET são instalados no GAC quando você instala o ArcGIS Desktop 10 .

De acordo com esta página , o Visual Studio não é necessário para instalar o ArcObjects 10 SDK - mas isso NÃO está correto, pois o instalador se recusa a continuar sem um VS IDE suportado instalado.

Se você usar comtypes, poderá usar os OLBs COM em vez dos PIAs .NET. É claro que você ainda teria que instalar comtypes ou implantá-lo com seu script (não sei como, mas acho que pode ser feito), mas eliminaria a dependência do assembly .NET.

Veja também perguntas relacionadas:

blah238
fonte
Ele afirma: O ArcGIS Desktop, o ArcGIS Engine Runtime ou o ArcGIS Server são necessários para o desenvolvimento com o ArcObjects SDK. Você também precisa ter o Microsoft .NET Framework 3.5 SP1 instalado. Portanto, se o desenvolvimento é feito, você não precisa do VS eu acho, mas você ainda precisa implantar o SDK
Hairy
A mistura de .NET e Python está funcionando perfeitamente, por isso não gosto de mudar para comtypes. Infelizmente, o instalador do SDK se recusa a continuar, a menos que o VS esteja na máquina.
Geografika
@geographika, você não pode instalar o SDK sem o VS na máquina. Uma maneira de evitar isso, se você comprou o SDK, é criar um aplicativo 'fictício' e migrar as dlls dentro do aplicativo fictício, depois implantá-lo no servidor para que elas sejam registradas. Em seguida, utilize-os assim.
Hairy
Confirmado. A documentação do ArcGIS afirma que não é necessário em determinadas páginas. Mas o instalador do SDK NÃO VAI ATRAVÉS sem o Visual Studio 2008 Express ou o Visual Studio 2010 premium / ult / test / professional.
Dexter
3

Você não pode agrupar as DLLs, pois isso é contra o seu contrato de licenciamento, e eles recentemente ficaram muito animados com isso. Você precisa instalar o AGS 10 .NET ou ArcObjects 10 .NET SDK e, obviamente, o Visual Studio.

Acabamos de ter nossos próprios problemas em torno do mesmo problema. Implantamos uma caixa de ferramentas .NET em um servidor Java AGS 10, com as DLLs agrupadas. Trabalhou um tratamento, até que fomos informados de que ele violava nosso contrato de licenciamento e teríamos que comprar os outros componentes ou enfrentar as consequências.

Isso meio que fede, mas ei ho. Significa 2 licenças AGS 10 para eles, para que alguém fique feliz ...

Peludo
fonte
Obrigado pela resposta. Para esclarecer, o usuário possui uma cópia licenciada da área de trabalho do ArcGIS em sua máquina, mas não o SDK ou o Visual Studio. Não há opção para instalar as DLLs sem um download de 600 MB do Visual Studio que nunca será usado?
Geografika
aparentemente não. Eu acredito que mudou ultimamente. Você não tem permissão para implantar as DLLs, nem mesmo um pouco; a instalação do aplicativo que você constrói, não pode conter as DLLs
Hairy
Há uma diferença entre implantar as DLLs de tempo de execução necessárias para executar o ArcGIS (bin / gac) e os assemblies de interoperabilidade necessários para desenvolver personalizações .net para ele (dotnet dir). Entre em contato com a Esri para obter esclarecimentos sobre o que você pode e não pode implantar neste caso.
SeaJunk
Se você criar um aplicativo AO .NET, precisará das dlls relevantes, empacotadas com ele na implantação; se não houver SDK do ArcObjects .NET no servidor de implantação, basta fazer isso para que ele seja executado. É contra suas condições de licenciamento agrupar as dlls. Período. Sei disso, como de fato, já que o encontramos e agora estamos migrando os serviços .NET para serviços Java, para que possamos executá-los, dentro da estrutura de licenciamento, em nossa instância do servidor ArcGIS 10 for Java
Hairy
@Peludo; Não, você não precisa agrupar / implantar as DLLs com seu código. Se você criar sua extensão corretamente, o código funcionará com as DLLs instaladas pelo GAC no software instalado pela ESRI e você não deverá ter nenhum problema. A chave é usar as DLLs para fazer referência adequadamente, como fazer com que o arquivo web / app.config faça referência à versão do GAC em vez de uma cópia de compilação local das bibliotecas apropriadas.
DEWright
0

Por que não usar o ArcGIS Engine Runtime ? É o tempo de execução para aplicativos independentes do ArcGIS / ArcObjects. Se você não estiver usando nenhum material da interface do usuário da área de trabalho em seus scripts, deve funcionar?

MathiasWestin
fonte
Isso também é uma violação de licença. Se você estiver usando as DLLs sem uma interface do usuário em um aplicativo do tipo 'Serviço', deverá ter a licença do AGS Server. Eu já havia perguntado à ESRI sobre o uso de um mecanismo para implantar um aplicativo, mas, como o APP geral era um serviço, eu precisava licenciar o AGS, não o mecanismo.
DEWright