Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

We are developping a C# ArcObjects Class extension assembly. Our development machine was recently updgraded to ArcGIS 10, but when we try to install the assembly on a 9.3.1 machine, we get an R0000 error while registering the assembly with regasm.

Is it possible to deploy on a ArcGIS 9.3.1 machine a component created with ArcGIS 10?

Edit: We also develop a c++ ArcObjects library and we have no trouble deploying to a 9.3.1 machine Edit2: In our .NET project, the ArcGIS Assembly references where explicitly set to Version Specific : false Edit3: I learned that setting an Assembly reference to Version Specific : false is only relevant to the development environment. It has nothing to do with which assembly is loaded at runtime.

share|improve this question
add comment

2 Answers

up vote 6 down vote accepted

After doing some research, I found a solution and it's called Assembly Binding Redirection

Basically, for any .net .exe, you can add XML code in the application config file to redirect a referenced assembly from a version number to another.

Esri implemented this in 10.0 and up versions in their EsriRegasm.exe utility. (located here : %commonprogramfiles(x86)%\ArcGIS\bin\esriRegasm.exe or %commonprogramfiles%\ArcGIS\bin\esriRegasm.exe)

If we take a look at 10.1 esriRegasm's configuration file (esriRegasm.exe.config), you see these lines :

<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>

It means that they are redirecting all references of ESRI.ArcGIS.Carto from 9.3 to 10.0 to the current assembly (10.1.0.0) so you will avoir errors

In my case, the target version is ArcGIS 9.3.1, and there's no EsriRegasm utility. I found a solution on microsoft connect site. Add, for each referenced assembly, this xml code to .NET's RegAsm.exe.config file

<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>

As stated in the microsoft connect artcile : You can copy regasm.exe + regasm.exe.config to a separate directory to avoid impacting all regasm invocations on the machine.

The bottom word is yes, it's possible, but the easier solution is probably to build our assemblies on a development machine with 9.3.1 installed.

I hope this helps someone

EDIT: In order to make it work in ArcMap.exe or ArcCatalog.exe, you have add the same xml code we put on regasm.exe.config in ArcMap or ArcCatalog's config file.

share|improve this answer
    
+1 How thoroughly have you tested this? –  Kirk Kuykendall Jun 29 '12 at 0:54
    
Yesterday I was able to register the assembly. This morning I was able to use my 10.1 assembly directly in ArcMap 9.3.1. I edited my post to add a step in order to make it work –  Goldorak84 Jun 29 '12 at 13:07
    
Interesting, I've always thought that assembly redirection is applicable for redirecting to a higher version only. –  Petr Krebs Jun 29 '12 at 22:11
    
One important note though: this will break any other installed ArcMap/ArcCatalog extensions (addins etc.) which rely on the newer version (> 9.3.0.1770) of the interop assemblies being present. They will be redirected to the older version as well, which might not include certain interfaces necessary for these extensions to work. –  Petr Krebs Jun 29 '12 at 22:18
    
I shouldn't break other extensions since there is only one ArcMap installation permitted in a local workstation. The "newVersion" field must reflect the local workstation's ArcMap version. –  Goldorak84 Jul 3 '12 at 14:56
add comment

I would say it is not recommended, since many of the arcobject namespaces have changed from 9.3.1 to 10 (e.g. ESRI.ArcGIS.ADF changed to ESRI.ArcGIS.ADF.Local).

Also, AddIn files are not even recognized on a 9.3.1 machine.

share|improve this answer
    
I know we are limited to objects and interfaces present in the 9.3.1 Assembly. This is not a problem for us and this works with the c++ part of our extension –  Goldorak84 Jun 28 '12 at 14:58
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.