@ Will - obrigado por compartilhar! Como bônus - lembre-se de executar fuslogvw.execomo administrador para evitar problemas de direitos.
SliverNinja - MSFT 27/02
13
@ Discordo que a instalação do fuslogvw seja a "melhor" resposta. Se você pudesse obter apenas a ferramenta sem precisar instalar todo o SDK do Windows no que provavelmente não é um ambiente de desenvolvimento, você teria razão.
Coxy
2
@ Certamente, mas a resposta para a qual você vincula não cobre nada disso.
Coxy
8
@ Will Por favor, não seja tão infantil sobre isso. Você é quem está tentando obter representantes promovendo uma resposta que, embora útil, a comunidade tenha julgado menos útil que outras, uma que é muito mais fácil e outra que é praticamente a mesma.
Coxy
Respostas:
868
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.
As soluções de Gary funcionaram para mim, embora eu também tenha que seguir redefinindo o IIS. Observe que eu configurei isso em um ambiente limpo, onde não queria instalar SDKs e similares.
Michhes
5
Foi relatado por alguns que a alteração do registro não é imediata. Você já tentou ativar o log do Fusion e depois reiniciar?
Gary Kindel
54
Você precisa reiniciar qualquer programa que é que você está correndo para ele ler essas configurações de registro
Orion Edwards
50
O Fusion Log Viewer faz tudo isso para você. Vá para Iniciar -> Programas -> Visual Studio xxxx> Ferramentas do Visual Studio> Prompt de comando do Visual Studio (executado como administrador) e digite "fuslogvw". Em Configurações, você ajusta o log.
R3mark
10
Para ativar / desativar o registro, criei arquivos .reg, baseados na resposta de Gary Kindel: ativar e desativar .
Marque a caixa de seleção Ativar caminho do log personalizado
Digite o local em que você deseja gravar os registros, por exemplo, c:\FusionLogs( Importante: verifique se você realmente criou esta pasta no sistema de arquivos.)
Verifique se o nível correto de log está ativado (às vezes eu apenas seleciono Log all binds to disk apenas para garantir que tudo esteja funcionando corretamente)
Clique em OK
Defina a opção local do log como Personalizado
Lembre-se de desativar o logoff quando terminar!
(Acabei de postar isso em uma pergunta semelhante - acho que é relevante aqui também.)
Observe que, nos casos em que você está hospedando o tempo de execução a partir de um aplicativo nativo, será necessário usar um caminho de log personalizado por algum motivo, caso contrário, você não obterá nada registrado.
jpierson
Pelo menos na minha situação, eu realmente não precisava definir os caminhos de log personalizados. Tudo o que eu precisava fazer era ativar o logon, por exemplo, "Registrar todas as ligações ao disco" na caixa de diálogo de configurações.
31414 Josh
42
Executar como administrador foi necessário no meu caso, caso contrário, todas as opções foram desabilitadas.
vezenkov 12/08
2
Nota: crie a pasta como Admin!
Tabrock
6
Verifique se você está executando fuslogvwnã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 ...)
Veverke
191
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".
Não que a entrada provavelmente não exista - você terá que criá-la. Pelo menos, eu fiz quando eu estava prestes a responder a esta pergunta, pouco antes do acidente esta manhã :)
Jon Skeet
3
O que faz o ! significar? Chave ou valor? E quanto aos sistemas de 64 bits?
de Bruno Martinez
48
na verdade, isso funciona ... você só precisa executar o afteris do iisreset para fazê-lo funcionar.
precisa
4
@ Norman: Como essa configuração específica é usada para fazer com que os erros do Asp.Net mostrem mensagens de erro de associação de montagem nas páginas de erro, não para salvar os logs no arquivo. @OP: +1. Editado para incluir um arquivo .reg. O ! O formato é o que eu nunca tinha visto, exceto na mensagem de erro que me enviou a esta página procurando respostas.
Brian
2
Você não precisa redefinir o IIS - apenas o pool de aplicativos relevante. Ou pelo menos era tudo o que eu precisava fazer.
precisa saber é o seguinte
81
Você pode executar esse script do Powershell como administrador para ativar o FL:
Obrigado! Eu me permiti colocar seus comandos nessa essência . E acrescentei criação do c:\FusionLogdir para que as pessoas não se esqueça que ;-)
Oliver
Regras de linha de comando! Eu pude reproduzir rapidamente isso usando a melhor tecnologia de reutilização de código até agora inventada chamada "recortar e colar". Obrigado.
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.
ps Certifique-se de desativá-lo depois de executar ou esta pasta poderia ficar muito grande
Adam Tuliper - MSFT
é por isso que eu uso o ETW, para registrar dados apenas se eu realmente precisar deles, não o tempo todo em um arquivo de log grande e feio.
magicandre1981
13
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-C01A46FAF4CAe a FusionKeywordpalavra - 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-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
Quando você agora abre o arquivo ETL no PerfView e olha sob a tabela Eventos, pode encontrar os dados do Fusion:
@YuriBondarchuk isso o ativa sob demanda e você tem mais dados no ETL (outros processos, dados de versão do arquivo) para poder fornecer aos arquivos t outros usuários e eles podem obter MUITO mais informação em comparação com o log de fusão normal
cara, você salva meu dia, levei cerca de 8 horas para resolver o problema. Muito Obrigado. :)
Dika Arta Karunia
3
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:
A montagem A carrega todas as montagens em alguma pasta
O assembly B nesta pasta está obsoleto, mas faz referência ao assembly C
O assembly C existe, mas os namespaces, nomes de classe ou algum outro detalhe podem ter mudado no tempo decorrido desde que o assembly B ficou obsoleto (no meu caso, um namespace foi alterado por meio de um processo de refatoração)
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.
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
fuslogvw.exe
como administrador para evitar problemas de direitos.Respostas:
Adicione os seguintes valores a
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.
fonte
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.)
fonte
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 é chamadoTargetFrameworkSDKToolsDirectory
). 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".
fonte
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:
Em seguida, execute o arquivo no Windows Explorer e ignore o aviso sobre possíveis danos.
fonte
Você pode executar esse script do Powershell como administrador para ativar o FL:
e este para desativar:
fonte
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.
fonte
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 GUID763FD754-7086-4DFE-95EB-C01A46FAF4CA
e aFusionKeyword
palavra - chave (0x4).Quando você agora abre o arquivo ETL no PerfView e olha sob a tabela Eventos, pode encontrar os dados do Fusion:
fonte
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.
fonte
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
fonte
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.
fonte
Para quem é um pouco preguiçoso, recomendo executá-lo como um arquivo bat para sempre que você quiser ativá-lo:
fonte
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
fonte
No meu caso, ajudou a digitar o nome do disco em minúsculas
Errado - C: \ someFolder
Correto - c: \ someFolder
fonte