it-swarm.com.de

Aktivieren der Assembly-Bindungsfehlerprotokollierung (Fusion) in .NET

Wie aktiviere ich die Protokollierung der Assembly-Bindungsfehler (Fusion) in .NET

748
user32736

Fügen Sie die folgenden Werte zu hinzu

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion 
 Hinzufügen: 
 DWORD ForceLog-Wert auf 1 gesetzt 
 DWORD LogFailures-Wert auf 1 setzen 1 
 String LogPath legt den Wert für den Ordner für Protokolle fest (z. B. C:\FusionLog \) 

Stellen Sie sicher, dass Sie den Backslash nach dem Ordnernamen und dem Ordner enthalten enthalten. 

Sie müssen das Programm, das Sie ausführen, neu starten, um das Lesen dieser Registrierungseinstellungen zu erzwingen.

Übrigens, vergessen Sie nicht, die Fusionsprotokollierung zu deaktivieren, wenn sie nicht benötigt wird. 

782
Gary Kindel

Normalerweise verwende ich den Fusion Log Viewer ( Fuslogvw.exe aus einer Eingabeaufforderung von Visual Studio oder den Fusion Log Viewer aus dem Startmenü) - meine Standardeinstellung ist:

  • Öffnen Sie den Fusion Log Viewer als Administrator
  • Klicken Sie auf Einstellungen.
  • Aktivieren Sie das Kontrollkästchen Benutzerdefinierten Protokollpfad aktivieren
  • Geben Sie den Ort ein, an den die Protokolle geschrieben werden sollen, z. B. c:\FusionLogs (Important: Stellen Sie sicher, dass Sie diesen Ordner im Dateisystem erstellt haben.)
  • Stellen Sie sicher, dass die richtige Stufe der Protokollierung aktiviert ist (manchmal wähle ich einfach Alle Bindungen auf Datenträger protokollieren, nur um sicherzustellen, dass alles richtig funktioniert)
  • Klicken Sie auf OK.
  • Legen Sie die Protokollspeicherortoption auf Custom fest.

Denken Sie daran, sich abzumelden, wenn Sie fertig sind! 

(Ich habe dies gerade zu einer ähnlichen Frage gepostet - ich denke, es ist auch hier relevant.)

238
Mike Goatly

Wenn Sie das Windows SDK auf Ihrem Computer installiert haben, finden Sie den "Fusion Log Viewer" unter Microsoft SDK\Tools (geben Sie einfach "Fusion" in das Startmenü von Vista oder Windows 7/8 ein). Starten Sie es, klicken Sie auf die Schaltfläche Einstellungen und wählen Sie "Fehler beim Protokollieren der Bindung" oder "Alle Bindungen protokollieren".

Wenn diese Schaltflächen deaktiviert sind, kehren Sie zum Startmenü zurück, klicken Sie mit der rechten Maustaste auf den Protokoll-Viewer, und wählen Sie "Als Administrator ausführen" aus.

184
Samuel Jack

Legen Sie den folgenden Registrierungswert fest:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion! EnableLog] (DWORD) auf 1

Zum Deaktivieren auf 0 setzen oder den Wert löschen.

[Bearbeiten]: Speichern Sie den folgenden Text in einer Datei, z. B. FusionEnableLog.reg, inWindows Registry Editor Format:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
"EnableLog"=dword:00000001

Führen Sie dann die Datei über den Windows Explorer aus und ignorieren Sie die Warnung vor möglichen Schäden.

82
user32736

Sie können dieses Powershell-Skript als Administrator ausführen, um FL zu aktivieren:

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

Hinweis: Stellen Sie sicher, dass das für den LogPath-Eintrag angegebene Verzeichnis vorhanden ist. Wenn das Verzeichnis nicht vorhanden ist, können Ihre Protokolle nicht abgerufen werden.

und dieses zu deaktivieren:

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
62
Tereza Tomcova

Das Fusion Log Settings Viewer-Änderungsskript ist keine der beste Weg, dies zu tun. 

In ASP.NET war es manchmal schwierig, dies richtig zu machen. Dieses Skript ist großartig und wurde auch auf Scott Hanselmans Power Tool-Liste aufgeführt. Ich habe es seit Jahren persönlich benutzt und es hat mich nie im Stich gelassen.

19

Anstatt eine unschöne Protokolldatei zu verwenden, können Sie das Fusion-Protokoll auch über ETW/xperf aktivieren, indem Sie den DotnetRuntime Private-Provider (Microsoft-Windows-DotNETRuntimePrivate) mit GUID 763FD754-7086-4DFE-95EB-C01A46FAF4CA und dem Schlüssel FusionKeyword (0x4) aktivieren.

@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

Wenn Sie nun die ETL-Datei in PerfView öffnen und unter der Ereignistabelle suchen, finden Sie die Fusion-Daten:

 Fusion events in PerfView

10
magicandre1981

Nur ein kleines bisschen Info, das anderen helfen könnte; Wenn Sie in einem Verzeichnis nach allen Assemblys nach Klassen suchen, die Klassen/Schnittstellen erben/implementieren, müssen Sie veraltete Assemblys bereinigen, wenn Sie diesen Fehler in einer Ihrer eigenen Assemblys erhalten.

Das Szenario wäre ungefähr so:

  1. Assembly A lädt alle Assemblys in einem Ordner 
  2. Assembly B in diesem Ordner ist veraltet, verweist jedoch auf Assembly C 
  3. Assembly C existiert, aber Namespaces, Klassennamen oder andere Details können sich in der Zeit geändert haben, seit Assembly B veraltet ist (in meinem Fall wurde ein Namespace durch einen Refactoring-Prozess geändert)

Kurz gesagt: A --- lädt -> B (veraltet) --- Referenzen ---> C

In diesem Fall ist das einzige Kontrollzeichen der Namespace und der Klassenname in der Fehlernachricht. Untersuche es genau. Wenn Sie es nirgendwo in Ihrer Lösung finden, versuchen Sie wahrscheinlich, eine veraltete Assembly zu laden.

3
andrerav

Wenn Sie die Protokollierung bereits aktiviert haben und dieser Fehler unter Windows 7 64 Bit weiterhin angezeigt wird, versuchen Sie dies in IIS 7.5:

  1. Erstellen Sie einen neuen Anwendungspool

  2. Wechseln Sie zu den erweiterten Einstellungen dieses Anwendungspools

  3. Setzen Sie die Enable 32-Bit Application auf True

  4. Verweisen Sie auf Ihre Webanwendung, um diesen neuen Pool zu verwenden

2
Adam Mendoza

Nur für den Fall, dass Sie sich fragen, wo FusionLog.exe liegt. Sie wissen, dass Sie es haben, aber Sie können es nicht finden? Ich habe in den letzten Jahren immer wieder nach FUSLOVW gesucht. Nach dem Wechsel zu .NET 4.5 ist die Versionsnummer von FUSION LOG explodiert. Dies sind Orte, an denen Sie sich auf Ihrer Festplatte befinden, abhängig von der installierten Software:

C:\Programme (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\x64 

C:\Programme (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64 

C:\Programme (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64 

C:\Programme (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools 

C:\Programme (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools 

C:\Programme (x86)\Microsoft SDKs\Windows\v7.0A\Bin

1

In meinem Fall half es, den Namen der Festplatte in Kleinbuchstaben einzugeben

Falsch - C:\someFolder

Korrigieren Sie - c:\someFolder

0
Vlad

Seit mein Tweet about Fusion ++ von Scott Hanselman selbst retweetet wurde, bin ich zuversichtlich, Ihnen davon zu erzählen.

Ich habe einen (verbesserungsfähigen) Assembly Binding Log Viewer namens Fusion ++ geschrieben und auf GitHub abgelegt.

Ich hoffe, Sie und einige der Besucher hier können sich damit ein paar lebenslange Minuten sparen.

 Fusion++

0
Waescher

Für diejenigen, die ein bisschen faul sind, empfehle ich, diese Datei als Fledermausdatei auszuführen, wenn Sie sie aktivieren möchten:

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
0
Igor Meszaros