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

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

preguntado el 01 de noviembre de 08 a las 06:11

Si a alguien le importa, para usar Fusion Logger (fuslogvw.exe) lea este artículo: msdn.microsoft.com/en-us/library/e74a18c4(v=VS.100).aspx te dice dónde descargarlo y otra información. -

@ Will - ¡gracias por compartir! Como beneficio adicional, asegúrese de correr fuslogvw.exe como administrador para evitar problemas de derechos. -

@ ¿No estaré de acuerdo con que instalar fuslogvw es la "mejor" respuesta? Si pudiera obtener solo la herramienta sin tener que instalar todo el SDK de Windows en lo que probablemente no sea un entorno de desarrollo, entonces tendría razón. -

@ Will Ciertamente, pero la respuesta a la que enlaza no cubre nada de eso. -

@Will Por favor, no seas tan infantil al respecto. Usted es el que está tratando de ganar reputación al promover una respuesta que, si bien es útil, la comunidad ha juzgado menos útil que otras, una que es mucho más fácil y otra que es prácticamente la misma. -

13 Respuestas

Agregue los siguientes valores a

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion Agregar: 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 que incluir la barra invertida después del nombre de la carpeta y que el La carpeta existe.

Debe reiniciar el programa que está ejecutando para obligarlo a leer la configuración del registro.

Por cierto, no olvide desactivar el registro de fusión cuando no sea necesario.

enter image description here

Respondido el 01 de junio de 20 a las 00:06

Las soluciones de Gary funcionaron para mí, aunque también tuve que seguir restableciendo IIS. Tenga en cuenta que configuré esto en un entorno limpio donde no quería instalar SDK y similares. - Micheles

Algunos han informado de que el cambio de registro no se lleva a cabo de inmediato. ¿Ha intentado activar el inicio de sesión de Fusion y luego reiniciarlo? - gary kindel

Debe reiniciar cualquier programa que esté ejecutando para que lea la configuración del registro. Orión Edwards

Fusion Log Viewer hace todo eso por usted. Vaya a Inicio -> Programas -> Visual Studio xxxx> Visual Studio Tools> Símbolo del sistema de Visual Studio (ejecutar como administrador) y escriba "fuslogvw". En Configuración, ajusta el registro. - marca r3

Para activar / desactivar el registro de forma práctica, he creado archivos .reg, que se basan en la respuesta de Gary Kindel: permitiendo y deshabilitar. - Ígor Kustov

Normalmente uso Fusion Log Viewer (Fuslogvw.exe de 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
  • Presione ajustes
  • Asegúrate de leer Habilitar ruta de registro personalizada casilla de verificación
  • Ingrese la ubicación en la que desea que se escriban los registros, por ejemplo, c:\FusionLogs (Importante: asegúrese de haber creado esta carpeta en el sistema de archivos).
  • Asegúrese de que esté activado el nivel correcto de registro (a veces solo selecciono Registrar todos los enlaces al disco solo para asegurarse de que todo funcione bien)
  • Presione OK
  • Establezca la opción de ubicación del registro en Personalizado

¡Recuerde desactivar el cierre de sesión una vez que haya terminado!

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

Respondido 16 Jul 19, 15:07

Tenga en cuenta que en los casos en los que usted mismo aloja el tiempo de ejecución desde una aplicación nativa, se le pedirá que utilice una ruta de registro personalizada por alguna razón, de lo contrario, no obtendrá nada registrado. - jpierson

Al menos en mi situación, en realidad no tuve que configurar las rutas de registro personalizadas. Todo lo que tenía que hacer era activar el inicio de sesión, por ejemplo, "Registrar todos los enlaces en el disco" en el cuadro de diálogo de configuración. - Josh

En mi caso, se requería ejecutar como administrador; de lo contrario, todas las opciones estaban deshabilitadas. - bordado

Nota: ¡crea la carpeta como administrador! - tabrock

Asegúrate de estar corriendo fuslogvw no solo como administrador sino también desde el correcta Ruta del SDK de Windows que utiliza el proyecto de Visual Studio que genera la excepción. Verifique su csproj y busque SDK dentro (mi nodo sdk se llama TargetFrameworkSDKToolsDirectory). El uso de una versión de fuslogvw que no coincide parece no detectar las excepciones (lo que tiene sentido ...) - veverke

Si tiene el SDK de Windows instalado en su máquina, encontrará el "Visor de registro de Fusion" en Microsoft SDK \ Tools (simplemente escriba "Fusion" en el menú de inicio en Vista o Windows 7/8). Ejecútelo, haga clic en el botón Configuración y seleccione "Registrar error de enlace" o "Registrar todos los enlaces".

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

contestado el 02 de mayo de 13 a las 10:05

Esos botones están desactivados para mí, ¿por qué? - Tim Lovell-Smith

@Tim, no había visto eso antes, ¿podría tener que ver con los privilegios de administrador? Después de todo, es HKEY_LOCAL_MACHINE lo que se está modificando. - Samuel jack

"Configuración, errores de enlace de registro" fue suficiente para encontrar mi problema. - pauloya

Asegúrese de que la carpeta permita el acceso de escritura. UAC y c: \ logs no funcionan bien con el registro de fusión - eduardo salvaje

Solo como nota, si los botones están deshabilitados, vuelva a ejecutar el visor de registro de fusión con privilegios de administrador. - bruno lopes

Establezca el siguiente valor de registro:

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

Para deshabilitar, establezca en 0 o elimine el valor.

[editar]: 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

Luego, ejecute el archivo desde el explorador de Windows e ignore la advertencia sobre posibles daños.

contestado el 20 de mayo de 13 a las 22:05

No es que la entrada probablemente no exista, tendrás que crearla. Al menos, lo hice cuando estaba a punto de responder esta pregunta justo antes del accidente esta mañana :) - jon skeet

Lo que hace el ! ¿significar? ¿Clave o valor? ¿Qué pasa con los sistemas de 64 bits? - bruno martinez

en realidad, esto funciona ... solo necesita ejecutar iisreset afterwords para que funcione. - Nick DeMayo

@Norman: Debido a que esta configuración en particular se usa para hacer que los errores de Asp.Net muestren mensajes de error de enlace de ensamblaje en las páginas de error, no para guardar los registros en un archivo. @OP: +1. Editado para incluir un archivo .reg. La ! El formato es uno que nunca había visto, excepto en el mensaje de error que me envió a esta página en busca de respuestas. - Brian

No es necesario restablecer IIS, solo el grupo de aplicaciones correspondiente. O al menos eso era todo lo que necesitaba hacer. - Kenny Evita

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
mkdir C:\FusionLog -Force

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

Respondido el 20 de junio de 19 a las 15:06

¡Gracias! Me he permitido poner tus órdenes en esta esencia. Y agregué la creación del c:\FusionLog dir para que la gente no lo olvide ;-) - Oliver

¡Reglas de la línea de comandos! Pude reproducir esto rápidamente usando la mejor tecnología de reutilización de código inventada hasta ahora llamada "cortar y pegar". Gracias. - Remigijus Pankevicius

Esta respuesta es mucho más útil, la puse en mis scripts la última vez. Ahora, unos meses después, volví aquí y vi el hilo de nuevo. Recuérdame cómo lo usé la última vez. - cwhsu

Las Script del cambiador del visor de configuración de registro de Fusion es sin excepción la mejor manera de hacer esto.

In ASP.NET, a veces ha sido complicado lograr que esto funcione correctamente. Este script funciona muy bien y se incluyó en Lista de herramientas eléctricas de Scott Hanselman también. Lo he usado personalmente durante años y nunca me decepcionó.

contestado el 13 de mayo de 12 a las 18:05

ps ASEGÚRESE de deshabilitarlo después de ejecutarlo o esta carpeta podría volverse bastante grande - Adam Tuliper - MSFT

esta es la razón por la que uso ETW, solo para registrar datos si realmente los necesito, no todo el tiempo en un archivo de registro grande y feo. - magicandre1981

Escribí un visor de registro de enlace de ensamblado llamado Fusion ++ y colócalo en GitHub.

Puede obtener la última versión de aquí o vía chocolateychoco install fusionplusplus).

Espero que usted y algunos de los visitantes aquí puedan ahorrar algunos minutos valiosos de por vida con él.

Fusión ++

Respondido 29 Jul 19, 08:07

Estimado señor, ¡es un dios! - sylvain girard

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

@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 ahora abre el archivo ETL en PerfView y busque debajo de la tabla Eventos, puede encontrar los datos de Fusion:

Eventos de fusión en PerfView

respondido 31 mar '15, 18:03

@YuriBondarchuk, esto lo activa a pedido y tiene más datos en el ETL (otros procesos, datos de versión de archivo) para que pueda entregar los archivos a otros usuarios y ellos puedan obtener MUCHA más información en comparación con el registro de fusión normal. magicandre1981

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

El escenario sería algo como:

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

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

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

Respondido 18 Jul 13, 16:07

Para aquellos que son un poco vagos, recomiendo ejecutar esto como un archivo bat para cuando quiera habilitarlo:

reg add "HKLM\Software\Microsoft\Fusion" /v EnableLog /t REG_DWORD /d 1 /f
reg add "HKLM\Software\Microsoft\Fusion" /v ForceLog /t REG_DWORD /d 1 /f
reg add "HKLM\Software\Microsoft\Fusion" /v LogFailures /t REG_DWORD /d 1 /f
reg add "HKLM\Software\Microsoft\Fusion" /v LogResourceBinds /t REG_DWORD /d 1 /f
reg add "HKLM\Software\Microsoft\Fusion" /v LogPath /t REG_SZ /d C:\FusionLog\

if not exist "C:\FusionLog\" mkdir C:\FusionLog

contestado el 08 de mayo de 19 a las 16:05

Si ya tiene habilitado el registro y aún recibe 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. Seleccione las Habilitar la aplicación de 32 bits a Verdadero

  4. Apunta tu aplicación web para usar este nuevo grupo

contestado el 13 de mayo de 12 a las 19:05

hombre, me salvas el día, tardé unas 8 horas en resolver el problema. muchas gracias. :) - Dika Arta Karunia

En caso de que se esté preguntando acerca de la ubicación de FusionLog.exe, ¿sabe que lo tiene, pero no puede encontrarlo? Estuve buscando FUSLOVW en los últimos años una y otra vez. Después de pasar a .NET 4.5, el número de versiones de FUSION LOG se ha disparado. Son lugares donde se puede encontrar en su disco, dependiendo del software que haya instalado:

C: \ Archivos de programa (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Tools \ x64

C: \ Archivos de programa (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ x64

C: \ Archivos de programa (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Tools \ x64

C: \ Archivos de programa (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Herramientas

C: \ Archivos de programa (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Herramientas

C: \ Archivos de programa (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin

Respondido 27 Oct 18, 16:10

En mi caso me ayudó a escribir el nombre del disco en minúsculas

Mal - C: \ someFolder

Correcto - c: \ someFolder

Respondido el 21 de enero de 19 a las 09:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.