Como habilito o log de falha de ligação de montagem (Fusion) no .NET?
fuslogvw.exe
como administrador para evitar problemas de direitos.
Como habilito o log de falha de ligação de montagem (Fusion) no .NET?
fuslogvw.exe
como administrador para evitar problemas de direitos.
Respostas:
Adicione os seguintes valores a
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion Adicionar: DWORD ForceLog define o valor como 1 DWORD LogFailures define o valor como 1 DWORD LogResourceBinds define o valor como 1 DWORD EnableLog define o valor como 1 String LogPath define o valor para a pasta dos logs (por exemplo, C: \ FusionLog \)
Certifique-se de incluir a barra invertida após o nome da pasta e de que a pasta existe .
Você precisa reiniciar o programa em execução para forçá-lo a ler essas configurações do Registro.
A propósito, não esqueça de desativar o log de fusão quando não for necessário.
Normalmente, uso o Fusion Log Viewer ( Fuslogvw.exe em um prompt de comando do Visual Studio ou Fusion Log Viewer no menu Iniciar) - minha configuração padrão é:
c:\FusionLogs
( Importante: verifique se você realmente criou esta pasta no sistema de arquivos.)Lembre-se de desativar o logoff quando terminar!
(Acabei de postar isso em uma pergunta semelhante - acho que é relevante aqui também.)
fuslogvw
não apenas como administrador, mas também no caminho correto do SDK do Windows que o projeto do Visual Studio que está lançando a exceção está usando. Verifique seu csproj e procure o SDK dentro (meu nó sdk é chamado TargetFrameworkSDKToolsDirectory
). Usando uma versão não fuslogvw correspondência parece não capturar as exceções (o que faz sentido ...)
Se você tiver o Windows SDK instalado em sua máquina, encontrará o "Fusion Log Viewer" em Microsoft SDK \ Tools (basta digitar "Fusion" no menu Iniciar do Vista ou Windows 7/8). Inicie-o, clique no botão Configurações e selecione "Falha na ligação do log" ou "Log all binds".
Se esses botões estiverem desativados, volte ao menu Iniciar, clique com o botão direito do mouse no Log Viewer e selecione "Executar como Administrador".
Defina o seguinte valor do registro:
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion! EnableLog] (DWORD) para 1
Para desativar, defina como 0 ou exclua o valor.
[edit]: Salve o seguinte texto em um arquivo, por exemplo, FusionEnableLog.reg, no formato do Editor do Registro do Windows:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
"EnableLog"=dword:00000001
Em seguida, execute o arquivo no Windows Explorer e ignore o aviso sobre possíveis danos.
Você pode executar esse script do Powershell como administrador para ativar o 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
e este para desativar:
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
c:\FusionLog
dir para que as pessoas não se esqueça que ;-)
O script do trocador do Fusion Log Settings Viewer não é a melhor maneira de fazer isso.
No ASP.NET , às vezes é complicado fazer com que isso funcione corretamente. Esse script funciona muito bem e também foi listado na lista de ferramentas elétricas de Scott Hanselman . Eu pessoalmente o uso há anos e nunca me decepcionou.
Em vez de usar um arquivo de log feio, você também pode ativar o log do Fusion via ETW / xperf ativando o provedor DotnetRuntime Private ( Microsoft-Windows-DotNETRuntimePrivate
) com GUID 763FD754-7086-4DFE-95EB-C01A46FAF4CA
e a FusionKeyword
palavra - chave (0x4).
@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
Quando você agora abre o arquivo ETL no PerfView e olha sob a tabela Eventos, pode encontrar os dados do Fusion:
Eu escrevi um visualizador de log de ligação de assembly chamado Fusion ++ e o coloquei no GitHub .
Você pode obter a versão mais recente daqui ou via chocolatey ( choco install fusionplusplus
).
Espero que você e alguns dos visitantes aqui possam economizar alguns minutos dignos da vida com isso.
Se você já possui o log ativado e ainda recebe esse erro no Windows 7 de 64 bits, tente isso no IIS 7.5:
Crie um novo pool de aplicativos
Vá para as configurações avançadas deste pool de aplicativos
Defina Ativar aplicativo de 32 bits como True
Aponte seu aplicativo Web para usar esse novo pool
Apenas um pouquinho de informação que pode ajudar outras pessoas; se você fizer algo parecido com a pesquisa de todos os assemblies em algum diretório por classes que herdam / implementam classes / interfaces, limpe os assemblies obsoletos se receber esse erro referente a um de seus próprios assemblies.
O cenário seria algo como:
Em resumo: A --- cargas -> B (obsoleto) --- referências ---> C
Se isso acontecer, o único sinal indicativo é o espaço para nome e o nome da classe na mensagem de erro. Examine-o de perto. Se você não conseguir encontrá-lo em nenhum lugar da sua solução, provavelmente está tentando carregar um assembly obsoleto.
Para quem é um pouco preguiçoso, recomendo executá-lo como um arquivo bat para sempre que você quiser ativá-lo:
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
Apenas no caso de você estar se perguntando sobre a localização do FusionLog.exe - Você sabe que o possui, mas não o consegue encontrar? Eu procurava o FUSLOVW nos últimos anos várias vezes. Após a mudança para o .NET 4.5, o número da versão do FUSION LOG explodiu. Aqui estão os locais em que ele pode ser encontrado no disco, dependendo do software que você instalou:
C: \ Arquivos de programas (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Tools \ x64
C: \ Arquivos de programas (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ x64
C: \ Arquivos de programas (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Tools \ x64
Ferramentas C: \ Arquivos de programas (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0
C: \ Arquivos de programas (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Tools
C: \ Arquivos de programas (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin