Como activar o registo de falhas de ligação do conjunto (fusão) in.NET
Como é que activo o registo de falhas da ligação de montagem (fusão) no. NET?
9 answers
Adicione os seguintes 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\)
Certifique-se que inclui a barra invertida a seguir ao nome da pasta e que a pasta existe.
Tem de reiniciar o programa que está a correr para o Forçar a ler as configurações do registo.
BTW, não se esqueça de desligar o corte de fusão quando não for necessário.Normalmente uso o Visualizador de Log de fusão (Fuslogvw.exe a partir de um visualizador de linha de comandos Visual Studio ou de Registo de fusão do menu inicial) - a minha configuração padrão é:
- Visualizador de Log de fusão aberta como administrador
- Carregue em configuração
- assinale a opção activar a localização de Registo personalizada
- indique a localização onde deseja que os registos sejam escritos, por exemplo,
c:\FusionLogs
(importante: certifique-se de que criou esta pasta na sistema.) - Certifique-se que o nível certo de Registo Está ligado (por vezes, basta seleccionar o registo liga-se ao disco só para ter a certeza que as coisas estão a funcionar correctamente)
- Clique em OK
- defina a opção de localização do registo como Personalizado
Se tiver o Windows SDK instalado na sua máquina, irá encontrar o" Visualizador de Log de fusão "no Microsoft SDK\Tools (basta escrever" Fusion " no menu Iniciar no Vista ou no Windows 7/8). Inicie-o, clique no botão de configuração, e selecione "Log bind failure" ou "Log all binds".
Se estes botões estiverem desactivados, volte ao menu Iniciar, carregue com o botão direito no Visualizador de Registos e seleccione "Executar como administrador".
Defina o seguinte valor de Registo:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \ Fusion!EnableLog] (DWORD) to 1
Para desactivar, definir para 0 ou apagar o valor.
[editar]: grave o seguinte texto num ficheiro, P.ex. FusionEnableLog.reg, em Formato Do Editor Do Registo Do Windows:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
"EnableLog"=dword:00000001
Depois execute o ficheiro do windows explorer e ignore o Aviso sobre possíveis danos.
Pode executar este programa Powershell como administrador para activar 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
Nota: Certifique-se de que o diretório fornecido para o item LogPath existe. Se o diretório não existir, então seus registros não serão recuperáveis.
E este para desactivar:
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
O Programa de mudança de configuração do registo de fusão não é a melhor forma de o fazer.
Em ASP.NET por vezes, tem sido difícil fazer com que isto funcione correctamente. Este script funciona bem e foi listado na lista de ferramentas de poder de Scott Hanselman também. Usei-o pessoalmente durante anos e nunca me desiludiu.
Em vez de usar um ficheiro de Registo feio, Poderá também activar o registo de fusão via ETW/xperf ligando o fornecedor privado DotnetRuntime (Microsoft-Windows-DotNETRuntimePrivate
) com o GUID 763FD754-7086-4DFE-95EB-C01A46FAF4CA
e a palavra-chave FusionKeyword
(0x4) ligada.
@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 abrir agora o ficheiro ETL em PerfView e procurar Debaixo da tabela de Eventos, poderá encontrar os dados de fusão:
Apenas um pequeno pedaço de informação que poderá ajudar os outros; se você fizer alguma coisa ao longo das linhas de pesquisa de todas as montagens em algum diretório para classes que herdam/implementam classes/interfaces, então certifique-se de limpar as montagens obsoletas se você obter este erro pertencente a uma de suas próprias montagens.
O cenário seria algo como:
- O conjunto a carrega todos os conjuntos numa pasta
- O conjunto B nesta pasta está obsoleto, mas o conjunto de referências C
- a montagem C existe, mas os espaços de nomes, nomes de classes ou algum outro detalhe podem ter mudado no tempo que passou desde que a montagem B se tornou obsoleta (no meu caso, um espaço de nomes foi alterado através de um processo de refactoração)
Em resumo: a - - - cargas-- > B (obsoletas) ---referências - - - > c
Se isto acontecer, o único sinal telltale é o espaço de nomes e o nome da classe na mensagem de erro. Examine-o de perto. Se você não pode encontrá-lo em qualquer lugar em sua solução, você provavelmente está tentando carregar um montagem obsoleta.
Se já tiver o registo activo e ainda tiver este erro no Windows 7 64 bit, tente isto no IIS 7. 5:
Criar um novo conjunto de aplicações
Ir para as configurações avançadas deste conjunto de aplicações
Definir o activar a aplicação de 32 bits para verdadeiro
Aponte a sua aplicação web para usar esta nova piscina