Processing math: 100%

4 votos

¿Es posible desplegar en una máquina ArcGIS 9.3.1 un componente creado con ArcGIS 10?

Estamos desarrollando un ensamblaje de extensión de clase C# ArcObjects. Nuestra máquina de desarrollo se actualizó recientemente a ArcGIS 10, pero cuando intentamos instalar el ensamblaje en una máquina 9.3.1, obtenemos un error R0000 al registrar el ensamblaje con regasm.

¿Es posible desplegar en una máquina ArcGIS 9.3.1 un componente creado con ArcGIS 10?

Edición: También desarrollamos una biblioteca de ArcObjects en c++ y no tenemos problemas para desplegar en una máquina 9.3.1 Edit2: En nuestro proyecto .NET, las referencias a los ensamblados de ArcGIS están explícitamente configuradas como versión específica: false Edit3: He aprendido que establecer una referencia de ensamblaje a Version Specific : false sólo es relevante para el entorno de desarrollo. No tiene nada que ver con la asamblea que se carga en tiempo de ejecución.

7voto

Goldorak84 Puntos 893

Después de investigar un poco, encontré una solución y se llama Redirección de la unión de conjuntos

Básicamente, para cualquier .net .exe, puedes añadir código XML en el archivo de configuración de la aplicación para redirigir un ensamblaje referenciado de un número de versión a otro.

Esri implementó esto en las versiones 10.0 y superiores en su EsriRegasm.exe utilidad. (ubicado aquí : %commonprogramfiles(x86)% \ArcGIS\bin\esriRegasm.exe o %commonprogramfiles% \ArcGIS\bin\esriRegasm.exe )

Si echamos un vistazo al archivo de configuración de esriRegasm 10.1 (esriRegasm.exe.config), verá estas líneas :

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="ESRI.ArcGIS.Carto" culture="" publicKeyToken="8fc3cc631e44ad86"/>
    <bindingRedirect oldVersion="9.3.0.0-10.0.0.0" newVersion="10.1.0.0"/>
  </dependentAssembly>
</assemblyBinding>

Significa que están redirigiendo todas las referencias de ESRI.ArcGIS.Carto de la 9.3 a la 10.0 al ensamblaje actual (10.1.0.0) por lo que se evitarán errores

En mi caso, la versión de destino es ArcGIS 9.3.1, y no existe la utilidad EsriRegasm. He encontrado una solución en sitio de microsoft connect . Añada, para cada ensamblaje referenciado, este código xml al archivo RegAsm.exe.config de .NET

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="ESRI.ArcGIS.Carto" culture="" publicKeyToken="8fc3cc631e44ad86"/>
        <bindingRedirect oldVersion="9.3.0.0-10.1.0.0" newVersion="9.3.0.1770"/>
      </dependentAssembly>
    </assemblyBinding>

Como se indica en el artículo de microsoft connect : Puede copiar regasm.exe + regasm.exe.config a un directorio separado para evitar el impacto de todas las invocaciones de regasm en la máquina.

La conclusión es que sí, es posible, pero la solución más fácil es probablemente construir nuestros ensamblajes en una máquina de desarrollo con 9.3.1 instalada.

Espero que esto ayude a alguien

EDITAR: Para que funcione en ArcMap.exe o ArcCatalog.exe, hay que añadir el mismo código xml que ponemos en regasm.exe.config en el archivo de configuración de ArcMap o ArcCatalog.

1voto

Hameno Puntos 129

Yo diría que no es recomendable, ya que muchos de los espacios de nombres arcobject han cambiado de 9.3.1 a 10 (por ejemplo, ESRI.ArcGIS.ADF cambió a ESRI.ArcGIS.ADF.Local).

Además, los archivos AddIn ni siquiera son reconocidos en una máquina 9.3.1.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X