Come posso abilitare la registrazione degli errori di bind assembly (Fusion) in .NET?
fuslogvw.exe
come amministratore per evitare problemi di diritti.
Come posso abilitare la registrazione degli errori di bind assembly (Fusion) in .NET?
fuslogvw.exe
come amministratore per evitare problemi di diritti.
Risposte:
Aggiungi i seguenti valori a
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion Inserisci: DWORD ForceLog imposta il valore su 1 DWORD LogFailures imposta il valore su 1 DWORD LogResourceBinds imposta il valore su 1 DWORD EnableLog imposta il valore su 1 String LogPath imposta il valore su cartella per i registri (ad es. C: \ FusionLog \)
Assicurarsi di includere la barra rovesciata dopo il nome della cartella e che la cartella esiste .
È necessario riavviare il programma in esecuzione per forzarlo a leggere le impostazioni del registro.
A proposito, non dimenticare di disattivare la registrazione della fusione quando non è necessario.
Di solito uso Fusion Log Viewer ( Fuslogvw.exe dal prompt dei comandi di Visual Studio o Fusion Log Viewer dal menu Start) - la mia configurazione standard è:
c:\FusionLogs
( Importante: assicurarsi di aver effettivamente creato questa cartella nel file system.)Ricordati di disattivare la disconnessione una volta terminato!
(Ho appena pubblicato questo su una domanda simile - penso che sia pertinente anche qui.)
fuslogvw
non solo come amministratore ma anche dal percorso corretto di Windows SDK utilizzato dal progetto Visual Studio che genera l'eccezione. Controlla il suo csproj e cerca SDK all'interno (il mio nodo SDK è chiamato TargetFrameworkSDKToolsDirectory
). L'uso di una versione di fuslogvw non corrispondente sembra non catturare le eccezioni (il che ha senso ...)
Se hai installato Windows SDK sul tuo computer, troverai "Fusion Log Viewer" in Microsoft SDK \ Tools (digita "Fusion" nel menu di avvio su Vista o Windows 7/8). Avviarlo, fare clic sul pulsante Impostazioni e selezionare "Log bind failure" o "Log all binds".
Se questi pulsanti sono disabilitati, tornare al menu di avvio, fare clic con il pulsante destro del mouse su Log Viewer e selezionare "Esegui come amministratore".
Imposta il seguente valore di registro:
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion! EnableLog] (DWORD) su 1
Per disabilitare, impostare su 0 o eliminare il valore.
[modifica]: salva il seguente testo in un file, ad esempio FusionEnableLog.reg, nel formato dell'editor del registro di Windows:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
"EnableLog"=dword:00000001
Quindi eseguire il file da Windows Explorer e ignorare l'avvertimento su possibili danni.
È possibile eseguire questo script Powershell come amministratore per abilitare 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 questo per disabilitare:
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 in modo che la gente non lo dimentichi ;-)
Lo script del commutatore Visualizzatore impostazioni registro Fusion non è il modo migliore per farlo.
In ASP.NET , a volte è stato complicato farlo funzionare correttamente. Questa sceneggiatura funziona alla grande ed è stata elencata anche nella lista dei Power Tool di Scott Hanselman . L'ho usato personalmente per anni e non mi ha mai deluso.
Invece di utilizzare un brutto file di registro, puoi anche attivare il registro Fusion tramite ETW / xperf attivando il provider privato DotnetRuntime ( Microsoft-Windows-DotNETRuntimePrivate
) con GUID 763FD754-7086-4DFE-95EB-C01A46FAF4CA
e la FusionKeyword
parola chiave (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 ora apri il file ETL in PerfView e guardi sotto la tabella degli eventi, puoi trovare i dati di Fusion:
Ho scritto un visualizzatore di registri di binding dell'assembly chiamato Fusion ++ e l'ho messo su GitHub .
Puoi ottenere l'ultima versione da qui o via chocolatey ( choco install fusionplusplus
).
Spero che tu e alcuni dei visitatori qui dentro ci risparmiate alcuni degni minuti di vita con esso.
Se hai già abilitato la registrazione e ricevi ancora questo errore su Windows 7 a 64 bit, prova in IIS 7.5:
Crea un nuovo pool di applicazioni
Vai alle Impostazioni avanzate di questo pool di applicazioni
Impostare Abilita applicazione a 32 bit su True
Punta la tua applicazione web per usare questo nuovo pool
Solo un po 'di informazioni che potrebbero aiutare gli altri; se si esegue qualcosa sulla falsariga di cercare tutti gli assembly in una directory per le classi che ereditano / implementano classi / interfacce, assicurarsi di eliminare gli assembly non aggiornati se si ottiene questo errore relativo a uno dei propri assembly.
Lo scenario sarebbe qualcosa del tipo:
In breve: A --- carica -> B (stantio) --- riferimenti ---> C
In questo caso, l'unico segno rivelatore è lo spazio dei nomi e il nome della classe nel messaggio di errore. Esaminalo attentamente. Se non riesci a trovarlo da nessuna parte nella tua soluzione, probabilmente stai provando a caricare un assieme non aggiornato.
Per coloro che sono un po 'pigri, consiglio di eseguirlo come file bat per quando si desidera abilitarlo:
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
Nel caso ti stia chiedendo quale sia la posizione di FusionLog.exe: sai di averlo, ma non riesci a trovarlo? Cercavo FUSLOVW negli ultimi anni ancora e ancora. Dopo il passaggio a .NET 4.5 è esploso il numero della versione di FUSION LOG. I suoi sono posti dove può essere trovato sul tuo disco, a seconda del software che hai installato:
C: \ Programmi (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Tools \ x64
C: \ Programmi (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ x64
C: \ Programmi (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Tools \ x64
C: \ Programmi (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Tools
C: \ Programmi (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Tools
C: \ Programmi (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin