29/3/11

Error al ejecutar código de CRM 4.0 en un CRM 2011

La situación es la siguiente: estoy en el proceso de cambio de entorno de desarrollo entre la versión 4.0 y la 2011. En los proyectos nuevos uso esta última, pero aún hay código para otros clientes que usa la versión 4.0. Bueno, pues al ejecutar cualquier código (cliente, test, web etc.) sorbe la máquina de desarrollo en la que tengo instalado CRM 2011 me encuentro con un error del estilo Ensamblado no encontrado o No coincide la versión de ensamblado.

System.IO.FileLoadException: Could not load file or assembly 'Microsoft.Crm.Sdk, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'Microsoft.Crm.Sdk, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' ---> System.IO.FileLoadException: Could not load file or assembly 'Microsoft.Crm.Sdk, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'Microsoft.Crm.Sdk, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'


La solución la da el gran David Jennaway en su blog. Hay que crear una sección del .config para invalidar una redirección de ensamblado en una política (incorrecta) introducida en CRM 2011.

<configuration>
<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
   <assemblyIdentity name="Microsoft.Crm.Sdk"
     publicKeyToken="31bf3856ad364e35" culture="neutral" />
   <publisherPolicy apply="no" />
  </dependentAssembly>
  </assemblyBinding>
</runtime>
</configuration>

¡Gracias, David!

No hay comentarios: