c# - Cómo habilitar el registro de fallos de enlace de ensamblaje(Fusion) en.NET
vb.net binding (10)
¿Cómo habilito el registro de fallos de enlace de ensamblaje (Fusion) en .NET?
Agregue los siguientes valores a
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Fusion Add: DWORD ForceLog set value to 1 DWORD LogFailures set value to 1 DWORD LogResourceBinds set value to 1 DWORD EnableLog set value to 1 String LogPath set value to folder for logs (e.g. C:/FusionLog/)
Asegúrese de incluir la barra diagonal inversa después del nombre de la carpeta y que la carpeta exista .
Debe reiniciar el programa que está ejecutando para forzarlo a leer esas configuraciones de registro.
Por cierto, no se olvide de desactivar el registro de fusión cuando no sea necesario.
En caso de que se esté preguntando acerca de la ubicación de FusionLog.exe, ¿sabe que la tiene pero no la puede encontrar? Estuve buscando FUSLOVW en los últimos años una y otra vez. Después de pasar a .NET 4.5, el número de la versión de FUSION LOG ha explotado. En estos lugares 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 Tools
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
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 privado DotnetRuntime ( Microsoft-Windows-DotNETRuntimePrivate
) con 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 ahora abre el archivo ETL en PerfView y mira debajo de la tabla de Eventos, puede encontrar los datos de Fusion:
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.
La secuencia de comandos del cambiador del Visor de configuración de registro de Fusion es la mejor forma de hacerlo.
En ASP.NET , a veces ha sido difícil lograr que esto funcione correctamente. Este script funciona muy bien y también se incluyó en la lista de herramientas eléctricas de Scott Hanselman . Personalmente lo he usado durante años y nunca me ha decepcionado.
Normalmente uso el Visor de registros de Fusion ( Fuslogvw.exe desde un indicador de comandos de Visual Studio o el Visor de registros de Fusion 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 de verificación Habilitar ruta de registro personalizada
- 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úrate de que el nivel correcto de registro esté activado (a veces simplemente selecciono Registrar todos los enlaces al disco solo para asegurarme de que todo funcione correctamente)
- Haga clic en OK
- Establezca la opción de ubicación de registro en Personalizada
¡Recuerda apagar la sesión una vez que hayas terminado!
(Acabo de publicar esto en una pregunta similar, creo que también es relevante aquí).
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 el directorio proporcionado para la entrada LogPath exista. 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
Si tiene el SDK de Windows instalado en su máquina, encontrará el "Visor de registro de Fusion" en Microsoft SDK / Tools (solo escriba "Fusion" en el menú de inicio en Vista o Windows 7/8). Inícielo, haga clic en el botón Configuración y seleccione "Error de enlace de registro" o "Registrar todos los enlaces".
Si estos botones están desactivados, regrese al menú de inicio, haga clic con el botón derecho en el Visor de registro y seleccione "Ejecutar como administrador".
Si ya tiene habilitado el registro y aún recibe este error en Windows 7 64 bit, intente esto en IIS 7.5:
Crear un nuevo grupo de aplicaciones
Ir a la Configuración avanzada de este grupo de aplicaciones
Establecer la aplicación Habilitar 32 bits en Verdadero
Apunta tu aplicación web para usar este nuevo grupo
Solo un poquito de información que podría ayudar a otros; Si hace algo parecido a buscar en todos los ensamblajes en algún directorio las clases que heredan / implementan clases / interfaces, entonces asegúrese de limpiar los ensamblajes obsoletos si recibe este error relacionado con uno de sus propios ensamblajes.
El escenario sería algo así como:
- El ensamblaje A carga todos los ensamblajes en alguna carpeta
- El ensamblaje B de esta carpeta está obsoleto, pero hace referencia al ensamblado C
- El ensamblaje C existe, pero los espacios de nombres, los nombres de las clases o algún otro detalle podrían haber cambiado en el tiempo transcurrido desde que el ensamblaje 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 clase en el mensaje de error. Examínalo de cerca. Si no puede encontrarlo en ninguna parte de su solución, es probable que esté intentando cargar un ensamblaje obsoleto.