@ Will - ¡gracias por compartir! Como beneficio adicional: asegúrese de ejecutarlo fuslogvw.execomo administrador para evitar problemas de derechos.
SliverNinja - MSFT
13
@ No estoy de acuerdo con que instalar fuslogvw sea 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 un punto.
Coxy
2
@ Sin duda, pero la respuesta a la que se vincula no cubre nada de eso.
Coxy
8
@ Will Por favor, no seas tan infantil al respecto. Usted es el que intenta reunir representantes promoviendo una respuesta que, si bien es útil, la comunidad ha considerado menos útil que otras, una que es mucho más fácil y otra que es prácticamente la misma.
Coxy
Respuestas:
868
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 registros (por ejemplo, C: \ FusionLog \)
Asegúrese de incluir la barra diagonal inversa después del nombre de la carpeta y de que la carpeta existe .
Debe reiniciar el programa que está ejecutando para obligarlo a leer la configuración del registro.
Por cierto, no olvides desactivar el registro de fusión cuando no sea necesario.
Las soluciones de Gary funcionaron para mí, aunque también tuve que seguir reiniciando IIS. Tenga en cuenta que configuré esto en un entorno limpio donde no quería instalar SDK y similares.
Michhes
55
Algunos han informado que el cambio en el registro no se lleva de inmediato. ¿Has intentado activar el inicio de sesión de Fusion y luego reiniciar?
Gary Kindel
54
Debe reiniciar cualquier programa que esté ejecutando para que pueda leer la configuración del registro
Orion Edwards
50
Fusion Log Viewer hace todo eso por usted. Vaya a Inicio -> Programas -> Visual Studio xxxx> Herramientas de Visual Studio> Símbolo del sistema de Visual Studio (ejecutar como administrador) y escriba "fuslogvw". En Configuración, ajusta el registro.
r3mark
10
Para activar / desactivar el registro a mano, he creado archivos .reg, que se basan en la respuesta de Gary Kindel: habilitar y deshabilitar .
Marque la casilla de verificación Habilitar ruta de acceso 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úrese de que el nivel correcto de registro esté activado (a veces solo selecciono Registrar todos los enlaces en el disco solo para asegurarme de que las cosas funcionen correctamente)
Haga clic en Aceptar
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í).
Tenga en cuenta que en los casos en que hospede el tiempo de ejecución usted mismo desde una aplicación nativa, se le pedirá que use una ruta de registro personalizada por algún motivo, de lo contrario no obtendrá nada registrado.
jpierson
Al menos en mi situación, en realidad no tuve que establecer 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 al disco" en el cuadro de diálogo de configuración.
Josh
42
Ejecutar como administrador era obligatorio en mi caso, de lo contrario, todas las opciones estaban deshabilitadas.
vezenkov
2
Nota: ¡cree la carpeta como Admin!
Tabrock
66
Asegúrese de ejecutar fuslogvwno solo como administrador sino también desde la ruta correcta del SDK de Windows que está utilizando el proyecto de Visual Studio que arroja la excepción. Verifique su csproj y busque SDK dentro (mi nodo sdk se llama TargetFrameworkSDKToolsDirectory). El uso de una versión de fuslogvw no coincidente parece no detectar las excepciones (lo cual tiene sentido ...)
Veverke
191
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 deshabilitados, regrese al menú de inicio, haga clic con el botón derecho en el Visor de registro y seleccione "Ejecutar como administrador".
No es que la entrada probablemente no exista; tendrá que crearla. Al menos, lo hice cuando estaba a punto de responder esta pregunta justo antes del accidente esta mañana :)
Jon Skeet
3
Lo que hace el ! ¿media? Clave o valor? ¿Qué pasa con los sistemas de 64 bits?
Bruno Martinez
48
en realidad, esto funciona ... solo necesita ejecutar iisreset afterwords para que funcione.
Nick DeMayo
44
@ Norman: Debido a que esta configuración 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 el archivo. @OP: +1. Editado para incluir un archivo .reg. Los ! 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
2
No necesita restablecer IIS, solo el grupo de aplicaciones relevante. O al menos eso era todo lo que necesitaba hacer.
Kenny Evitt
81
Puede ejecutar este script de Powershell como administrador para habilitar FL:
¡Gracias! Me permití poner tus órdenes en esta esencia . Y agregué la creación del c:\FusionLogdirectorio para que la gente no lo olvide ;-)
Oliver
Reglas de línea de comando! Podría reproducir esto rápidamente utilizando la tecnología de reutilización de código mejor inventada hasta ahora llamada "cortar y pegar". Gracias.
En ASP.NET , a veces ha sido complicado hacer que esto funcione correctamente. Este script funciona muy bien y también figura en la lista de herramientas de Scott Hanselman . Lo he usado personalmente durante años y nunca me ha decepcionado.
ps ASEGÚRESE de deshabilitarlo después de ejecutarlo o esta carpeta podría ser bastante grande
Adam Tuliper - MSFT
Es por eso que uso ETW, solo para registrar datos si realmente los necesito, no todo el tiempo en un archivo de registro feo y grande.
magicandre1981
13
En lugar de utilizar 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-C01A46FAF4CAy la FusionKeywordpalabra 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-MaxFile2048-FileModeCircular-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 15set XPERF_CreateNGenPdbs=1"C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe"-stop ClrSessionClrRundownSession"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 Eventos, puede encontrar los datos de Fusion:
@YuriBondarchuk esto lo activa bajo demanda y tiene más datos en el ETL (otros procesos, datos de conversión de archivos) para que pueda proporcionar los archivos a otros usuarios y puedan obtener MUCHA más información en comparación con el registro de fusión normal
hombre, me salvas el día, me tomó alrededor de 8 horas resolver el problema. muchas gracias. :)
Dika Arta Karunia
3
Solo un poquito de información que podría ayudar a otros; si hace algo en la línea de buscar en todos los ensamblados en algún directorio las clases que heredan / implementan clases / interfaces, entonces asegúrese de limpiar los ensambles obsoletos si obtiene este error relacionado con uno de sus propios ensamblajes.
El escenario sería algo como:
El conjunto A carga todos los conjuntos en alguna carpeta
El ensamblado B en esta carpeta está obsoleto, pero hace referencia al ensamblado C
El ensamblado C existe, pero los espacios de nombres, los nombres de clase 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 modificó mediante un proceso de refactorización)
En resumen: A --- cargas -> B (rancio) --- 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 esté intentando cargar un conjunto obsoleto.
En caso de que se pregunte sobre la ubicación de FusionLog.exe: ¿sabe que lo tiene, pero no puede encontrarlo? Estaba buscando FUSLOVW en los últimos años una y otra vez. Después de pasar a .NET 4.5, el número de versión de FUSION LOG ha explotado. Hay 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
fuslogvw.exe
como administrador para evitar problemas de derechos.Respuestas:
Agregue los siguientes valores a
Asegúrese de incluir la barra diagonal inversa después del nombre de la carpeta y de que la carpeta existe .
Debe reiniciar el programa que está ejecutando para obligarlo a leer la configuración del registro.
Por cierto, no olvides desactivar el registro de fusión cuando no sea necesario.
fuente
Por lo general, uso 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:
c:\FusionLogs
( Importante: asegúrese de haber creado esta carpeta en el sistema de archivos).¡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í).
fuente
fuslogvw
no solo como administrador sino también desde la ruta correcta del SDK de Windows que está utilizando el proyecto de Visual Studio que arroja la excepción. Verifique su csproj y busque SDK dentro (mi nodo sdk se llamaTargetFrameworkSDKToolsDirectory
). El uso de una versión de fuslogvw no coincidente parece no detectar las excepciones (lo cual tiene sentido ...)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 deshabilitados, regrese al menú de inicio, haga clic con el botón derecho en el Visor de registro y seleccione "Ejecutar como administrador".
fuente
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:
Luego ejecute el archivo desde el explorador de Windows e ignore la advertencia sobre posibles daños.
fuente
Puede ejecutar este script de Powershell como administrador para habilitar FL:
y este para deshabilitar:
fuente
c:\FusionLog
directorio para que la gente no lo olvide ;-)El script del cambiador del Visor de configuración de registro de Fusion no es la mejor manera de hacerlo.
En ASP.NET , a veces ha sido complicado hacer que esto funcione correctamente. Este script funciona muy bien y también figura en la lista de herramientas de Scott Hanselman . Lo he usado personalmente durante años y nunca me ha decepcionado.
fuente
En lugar de utilizar 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 GUID763FD754-7086-4DFE-95EB-C01A46FAF4CA
y laFusionKeyword
palabra clave (0x4) activada.Cuando abre el archivo ETL en PerfView y mira debajo de la tabla Eventos, puede encontrar los datos de Fusion:
fuente
Escribí un visor de registro de enlace de ensamblaje llamado Fusion ++ y lo puse en GitHub .
Puede obtener la última versión desde aquí o mediante chocolatey (
choco install fusionplusplus
).Espero que usted y algunos de los visitantes aquí puedan ahorrar algunos valiosos minutos de por vida.
fuente
Si ya tiene habilitado el registro y aún recibe este error en Windows 7 de 64 bits, intente esto en IIS 7.5:
Crear un nuevo grupo de aplicaciones
Vaya a la Configuración avanzada de este grupo de aplicaciones
Establezca Habilitar aplicación de 32 bits en Verdadero
Apunte su aplicación web para usar este nuevo grupo
fuente
Solo un poquito de información que podría ayudar a otros; si hace algo en la línea de buscar en todos los ensamblados en algún directorio las clases que heredan / implementan clases / interfaces, entonces asegúrese de limpiar los ensambles obsoletos si obtiene este error relacionado con uno de sus propios ensamblajes.
El escenario sería algo como:
En resumen: A --- cargas -> B (rancio) --- 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 esté intentando cargar un conjunto obsoleto.
fuente
Para aquellos que son un poco vagos, les recomiendo ejecutar esto como un archivo bat para cuando quieran habilitarlo:
fuente
En caso de que se pregunte sobre la ubicación de FusionLog.exe: ¿sabe que lo tiene, pero no puede encontrarlo? Estaba buscando FUSLOVW en los últimos años una y otra vez. Después de pasar a .NET 4.5, el número de versión de FUSION LOG ha explotado. Hay 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
fuente
En mi caso ayudó a escribir el nombre del disco en minúsculas
Incorrecto - C: \ someFolder
Correcto - c: \ someFolder
fuente