Errores de tipo "could not load type"

¿Alguna vez os habéis encontrado en CRM con errores del tipo...

“Could not load type 'Microsoft.Xrm.Sdk.Workflow.ICustomActivityExecutionContext' from assembly 'Microsoft.Xrm.Sdk.Workflow, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'” ?

Ya sea una dll propia de CRM como en el caso anterior, o una personalizada nuestra, a veces nos encontramos con estos errores y no sabemos a qué se deben. Para intentar averiguarlo aquí van unas sugerencias:

 

1. Como es habitual el primer paso debería ser tomar una traza de CRM para tener más detalles del error. Esto lo podemos hacer utilizando la herramienta de diagnóstico o activando las trazas (https://support.microsoft.com/kb/907490).

 

2. Como siguiente paso podemos abrir Process Monitor para ver dónde está buscando la dll anterior y qué está pasando. Podéis descargar la herramienta de aquí:

(https://technet.microsoft.com/en-us/sysinternals/bb896645.aspx)

Comenzad la captura hasta que aparezca el error y entonces pararla. Para filtrarla podemos aplicar los siguientes filtros:

- Si por ejemplo el error nos aparece para el servicio asíncrono de CRM, aplicaremos este filtro:

Process Name – is - CrmAsyncService.exe – then include -> Add

- Otro filtro para dejar solo lo relacionado con el assembly que menciona el error:

           
Path – contains - Sdk.Workflow – then Include -> Add

Click Apply y OK. Ahora veremos una lista tal que así:

 

 Si nos fijamos en las columnas de Result, Operation y Path podremos tener más información sobre los accesos a la dll.

 

3. Fusion log

Si tenéis instaladas las herramientas de Visual Studio (https://msdn.microsoft.com/en-us/library/e74a18c4(v=VS.100).aspx):

- Abrid el command promt de Visual Studio como administrador y lanzar “fuslogvw”. Esto abre el visor de logs de fusión.

- Settings -> Log bind failures, e indicar una ruta donde guarder los logs:

- Settings -> Log all binds to disk (solo si no hay errors durante el binding y queremos averiguar en qué ruta estará la dll que buscamos.

- ISSReset y abrid CRM -> nos generará todos los logs en la ruta y aparecerán en el visor.

   
Si no tenéis las herramientas de Visual Studio:

 - Id a:

        HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion
  - Añadir: 
 DWORD LogFailures valor a 1
 DWORD LogResourceBinds valor a 1
 String LogPath a la carpeta donde queramos guardar los logs (
 por ejemplo. C:\FusionLog\)
 - Igualmente, si no tenemos errores pero queremos ver a dónde va la dll añadid 
 tambien: 
        DWORD ForceLog valor a 1
 - IISReset y abrid CRM -> nos generará todos los logs en la ruta.

- Ahora abrid los logs para la dll que buscáis y ver dónde busca la dll, dónde se

crea la imagen nativa, etc y qué fallos da.

- Deshabilitarlo (en el fusion log viewer o poniendo las regkeys a 0) cuando terminemos.