Cómo habilitar el registro de fallas de enlace de ensamblaje (Fusion) en .NET

¿Cómo habilito el registro de fallas de enlace de ensamblaje (Fusion) en .NET?

Agregue los siguientes valores a

 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion
 Añadir:
 DWORD ForceLog establece el valor en 1
 DWORD LogFailures establece el valor en 1
 DWORD LogResourceBinds establece el valor en 1
 DWORD EnableLog establece el valor en 1
 String LogPath establece el valor en la carpeta para los registros (por ejemplo, C: \ FusionLog \)

Asegúrese de incluir la barra diagonal inversa después del nombre de la carpeta y de que existe la carpeta .

Debe reiniciar el progtwig que está ejecutando para obligarlo a leer esas configuraciones de registro.

Por cierto, no olvides desactivar el inicio de sesión de fusión cuando no sea necesario.

Usualmente utilizo Fusion Log Viewer ( Fuslogvw.exe desde un símbolo del sistema de Visual Studio o Fusion Log Viewer desde el menú de inicio) – mi configuración estándar es:

  • Abra Fusion Log Viewer como administrador
  • Haga clic en configuración
  • Marque la casilla Habilitar ruta de registro personalizada
  • Ingrese la ubicación donde desea que se escriban los registros, por ejemplo, c:\FusionLogs ( Importante: asegúrese de haber creado esta carpeta en el sistema de archivos).
  • Asegúrate de que el nivel correcto de registro esté activado (a veces solo selecciono Registrar todo se une al disco solo para asegurarme de que las cosas funcionen bien)
  • Click OK
  • Establezca la opción de ubicación de registro en Personalizado

¡Recuerde cerrar la sesión una vez que haya terminado!

(Acabo de publicar esto en una pregunta similar, creo que es relevante aquí también).

Si tiene instalado el SDK de Windows en su máquina, encontrará el “Fusion Log Viewer” en Microsoft SDK \ Tools (simplemente escriba “Fusion” en el menú de inicio en Vista o Windows 7/8). Inicie, haga clic en el botón Configuración y seleccione “Error de enlace de registro” o “Log all binds”.

Si estos botones están deshabilitados, vuelva al menú de inicio, haga clic con el botón derecho en el Visor de registro y seleccione “Ejecutar como administrador”.

Establezca el siguiente valor de registro:

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion! EnableLog] (DWORD) a 1

Para deshabilitar, establecer a 0 o eliminar el valor.

[edit]: Guarde el siguiente texto en un archivo, por ejemplo, FusionEnableLog.reg, en el Formato del Editor del Registro de Windows:

 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion] "EnableLog"=dword:00000001 

A continuación, ejecute el archivo desde el explorador de Windows e ignore la advertencia sobre posibles daños.

Puede ejecutar este script de Powershell como administrador para habilitar FL:

 Set-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name ForceLog -Value 1 -Type DWord Set-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogFailures -Value 1 -Type DWord Set-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogResourceBinds -Value 1 -Type DWord Set-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogPath -Value 'C:\FusionLog\' -Type String 

Nota: Asegúrese de que exista el directorio proporcionado para la entrada LogPath. Si el directorio no existe, entonces sus registros no serán recuperables.

y este para deshabilitar:

 Remove-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name ForceLog Remove-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogFailures Remove-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogResourceBinds Remove-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogPath 

La secuencia de comandos del cambiador de visor de configuraciones de registro de Fusion es sin barra, la mejor manera de hacerlo.

En ASP.NET , a veces ha sido complicado lograr que esto funcione correctamente. Este script funciona muy bien y también figuraba en la lista de herramientas eléctricas de Scott Hanselman . Personalmente lo he usado durante años y nunca me decepcionó.

En lugar de utilizar un feo archivo de registro, también puede activar el registro de Fusion a través de ETW / xperf activando el proveedor DotnetRuntime Private ( Microsoft-Windows-DotNETRuntimePrivate ) con el GUID 763FD754-7086-4DFE-95EB-C01A46FAF4CA y la palabra clave FusionKeyword (0x4) en.

 @echo off echo Press a key when ready to start... pause echo . echo ...Capturing... echo . "C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -on PROC_THREAD+LOADER+PROFILE -stackwalk Profile -buffersize 1024 -MaxFile 2048 -FileMode Circular -f Kernel.etl "C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -start ClrSession -on Microsoft-Windows-DotNETRuntime:0x8118:0x5:'stack'+763FD754-7086-4DFE-95EB-C01A46FAF4CA:0x4:0x5 -f clr.etl -buffersize 1024 echo Press a key when you want to stop... pause pause echo . echo ...Stopping... echo . "C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -start ClrRundownSession -on Microsoft-Windows-DotNETRuntime:0x8118:0x5:'stack'+Microsoft-Windows-DotNETRuntimeRundown:0x118:0x5:'stack' -f clr_DCend.etl -buffersize 1024 timeout /t 15 set XPERF_CreateNGenPdbs=1 "C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -stop ClrSession ClrRundownSession "C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -stop "C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -merge kernel.etl clr.etl clr_DCend.etl Result.etl -compress del kernel.etl del clr.etl del clr_DCend.etl 

Cuando abre el archivo ETL en PerfView y mira debajo de la tabla de Eventos, puede encontrar los datos de Fusion:

Eventos Fusion en PerfView

Solo un poquito de información que podría ayudar a otros; Si hace algo en la línea de buscar todos los ensamblados en algún directorio para las clases que heredan / implementan clases / interfaces, entonces asegúrese de limpiar los conjuntos obsoletos si obtiene este error perteneciente a uno de sus propios ensamblajes.

El escenario sería algo así como:

  1. El ensamblaje A carga todos los ensamblados en alguna carpeta
  2. El conjunto B en esta carpeta está obsoleto, pero hace referencia al conjunto C
  3. El ensamblado C existe, pero los espacios de nombres, nombres de clase o algún otro detalle pueden haber cambiado en el tiempo que ha pasado desde que el ensamblado B se volvió obsoleto (en mi caso, un espacio de nombres fue cambiado a través de un proceso de refactorización)

En resumen: A — cargas -> B (obsoleta) — referencias —> C

Si esto sucede, el único signo revelador es el espacio de nombres y el nombre de clase en el mensaje de error. Examínelo de cerca. Si no puede encontrarlo en ninguna parte de su solución, es probable que intente cargar un ensamblaje obsoleto.

Si ya tiene habilitado el registro y aún obtiene este error en Windows 7 de 64 bits, intente esto en IIS 7.5:

  1. Crear un nuevo grupo de aplicaciones

  2. Vaya a la configuración avanzada de este grupo de aplicaciones

  3. Establezca la aplicación Habilitar de 32 bits en True

  4. Apunte su aplicación web para usar este nuevo grupo