@ Will - danke fürs Teilen! Als Bonus - stellen Sie sicher, dass Sie fuslogvw.exeals Administrator ausgeführt werden, um Rechteprobleme zu vermeiden.
SliverNinja - MSFT
13
@ Will ich nicht zustimmen, dass die Installation von fuslogvw die "beste" Antwort ist. Wenn Sie nur das Tool erhalten könnten, ohne das gesamte Windows SDK in einer wahrscheinlich nicht entwicklungsorientierten Umgebung installieren zu müssen, hätten Sie einen Punkt.
Coxy
2
@ Will sicher, aber die Antwort, auf die Sie verlinken, deckt nichts davon ab.
Coxy
8
@ Will Bitte sei nicht so kindisch. Sie sind derjenige, der versucht, Repräsentanten zu sammeln, indem Sie eine Antwort bewerben, die zwar nützlich ist, von der Community jedoch als weniger hilfreich beurteilt wurde als andere, die viel einfacher und die andere praktisch gleich ist.
Coxy
Antworten:
868
Fügen Sie die folgenden Werte hinzu
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion
Hinzufügen:
DWORD ForceLog setzt den Wert auf 1
DWORD LogFailures setzt den Wert auf 1
DWORD LogResourceBinds setzt den Wert auf 1
DWORD EnableLog setzt den Wert auf 1
String LogPath setzt den Wert für Protokolle auf Ordner (z. B. C: \ FusionLog \)
Stellen Sie sicher, dass Sie den Backslash nach dem Ordnernamen einfügen und dass der Ordner vorhanden ist .
Sie müssen das ausgeführte Programm neu starten, um das Lesen dieser Registrierungseinstellungen zu erzwingen.
Vergessen Sie übrigens nicht, die Fusionsprotokollierung zu deaktivieren, wenn sie nicht benötigt wird.
Garys Lösungen funktionierten für mich, obwohl ich auch IIS zurücksetzen musste. Hinweis Ich habe dies in einer sauberen Umgebung konfiguriert, in der ich keine SDKs und dergleichen installieren wollte.
Michhes
5
Einige haben berichtet, dass eine Änderung der Registrierung nicht sofort erfolgt. Haben Sie versucht, die Fusion-Anmeldung zu aktivieren und dann neu zu starten?
Gary Kindel
54
Sie müssen das Programm, das Sie ausführen, neu starten, damit es diese Registrierungseinstellungen lesen kann
Orion Edwards
50
Der Fusion Log Viewer erledigt das alles für Sie. Gehen Sie zu Start -> Programme -> Visual Studio xxxx> Visual Studio-Tools> Visual Studio-Eingabeaufforderung (als Administrator ausführen) und geben Sie "fuslogvw" ein. In den Einstellungen passen Sie die Protokollierung an.
r3mark
10
Um die Protokollierung praktisch ein- und auszuschalten, habe ich .reg-Dateien erstellt, die auf Gary Kindels Antwort basieren: Aktivieren und Deaktivieren .
Aktivieren Sie das Kontrollkästchen Benutzerdefinierten Protokollpfad aktivieren
Geben Sie den Speicherort ein, an den Protokolle geschrieben werden sollen, z. B. c:\FusionLogs( Wichtig: Stellen Sie sicher, dass Sie diesen Ordner tatsächlich im Dateisystem erstellt haben.)
Stellen Sie sicher, dass die richtige Protokollierungsstufe aktiviert ist (manchmal wähle ich einfach Alle Bindungen auf Festplatte protokollieren aus , um sicherzustellen, dass alles richtig funktioniert).
Klicken Sie auf OK
Setzen Sie die Option für den Protokollspeicherort auf Benutzerdefiniert
Denken Sie daran, die Abmeldung zu deaktivieren, wenn Sie fertig sind!
(Ich habe dies gerade zu einer ähnlichen Frage gepostet - ich denke, es ist auch hier relevant.)
Beachten Sie, dass Sie in Fällen, in denen Sie die Laufzeit selbst von einer nativen Anwendung aus hosten, aus irgendeinem Grund einen benutzerdefinierten Protokollpfad verwenden müssen, da sonst nichts protokolliert wird.
Jpierson
Zumindest in meiner Situation musste ich die benutzerdefinierten Protokollpfade nicht festlegen. Alles, was ich tun musste, war die Anmeldung zu aktivieren, z. B. "Alle Bindungen auf der Festplatte protokollieren" im Einstellungsdialog.
Josh
42
In meinem Fall war "Ausführen als Administrator" erforderlich, andernfalls wurden alle Optionen deaktiviert.
Vezenkov
2
Hinweis: Erstellen Sie den Ordner als Admin!
Tabrock
6
Stellen Sie sicher, dass Sie fuslogvwnicht nur als Administrator ausgeführt werden, sondern auch über den richtigen Windows SDK-Pfad, den das Visual Studio-Projekt verwendet, das die Ausnahme auslöst. Überprüfen Sie das csproj und suchen Sie nach SDK (mein SDK-Knoten heißt TargetFrameworkSDKToolsDirectory). Die Verwendung einer nicht passenden fuslogvw-Version scheint die Ausnahmen nicht zu erfassen (was Sinn macht ...)
Veverke
191
Wenn Sie das Windows SDK auf Ihrem Computer installiert haben, finden Sie den "Fusion Log Viewer" unter Microsoft SDK \ Tools (geben Sie einfach "Fusion" im Startmenü unter Vista oder Windows 7/8 ein). Starten Sie es, klicken Sie auf die Schaltfläche Einstellungen und wählen Sie "Protokollbindungsfehler" 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".
Nicht, dass der Eintrag wahrscheinlich nicht existiert - Sie müssen ihn erstellen. Zumindest habe ich das getan, als ich diese Frage heute Morgen kurz vor dem Absturz beantworten wollte :)
Jon Skeet
3
Was macht das! bedeuten? Schlüssel oder Wert? Was ist mit 64-Bit-Systemen?
Bruno Martinez
48
Eigentlich funktioniert das ... Sie müssen nur iisreset afterwords ausführen, damit es funktioniert.
Nick DeMayo
4
@Norman: Da diese spezielle Einstellung verwendet wird, um die Asp.Net-Fehler dazu zu bringen, dass auf den Fehlerseiten Fehlermeldungen zur Baugruppenbindung angezeigt werden, werden die Protokolle nicht in einer Datei gespeichert. @OP: +1. Bearbeitet, um eine .reg-Datei einzuschließen. Das ! Das Format habe ich noch nie gesehen, außer in der Fehlermeldung, die mich auf diese Seite geschickt hat, um nach Antworten zu suchen.
Brian
2
Sie müssen IIS nicht zurücksetzen - nur den entsprechenden Anwendungspool. Zumindest war das alles, was ich tun musste.
Kenny Evitt
81
Sie können dieses Powershell-Skript als Administrator ausführen, um FL zu aktivieren:
Vielen Dank! Ich habe mir erlaubt, Ihre Befehle in dieses Wesentliche aufzunehmen . Und ich habe die Erstellung des c:\FusionLogVerzeichnisses hinzugefügt, damit die Leute das nicht vergessen ;-)
Oliver
Befehlszeilenregeln! Ich könnte dies schnell wiedergeben, indem ich die bisher am besten erfundene Code-Wiederverwendbarkeitstechnologie namens "Ausschneiden und Einfügen" verwende. Vielen Dank.
In ASP.NET war es manchmal schwierig, dies richtig zum Laufen zu bringen. Dieses Skript funktioniert hervorragend und wurde auch in der Liste der Elektrowerkzeuge von Scott Hanselman aufgeführt . Ich persönlich habe es jahrelang benutzt und es hat mich nie im Stich gelassen.
ps Stellen Sie sicher, dass Sie es nach dem Ausführen deaktivieren oder dieser Ordner könnte ziemlich groß werden
Adam Tuliper - MSFT
Aus diesem Grund verwende ich ETW, um Daten nur dann zu protokollieren, wenn ich sie wirklich benötige, nicht immer in einer hässlichen großen Protokolldatei.
magicandre1981
13
Anstatt eine hässliche Protokolldatei zu verwenden, können Sie das Fusion-Protokoll auch über ETW / xperf aktivieren, indem Sie den DotnetRuntime Private Provider ( Microsoft-Windows-DotNETRuntimePrivate) mit aktivierter GUID 763FD754-7086-4DFE-95EB-C01A46FAF4CAund dem FusionKeywordSchlüsselwort (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-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
Wenn Sie jetzt die ETL-Datei in PerfView öffnen und in der Ereignistabelle nachsehen, finden Sie die Fusion-Daten:
@YuriBondarchuk dies aktiviert es bei Bedarf und Sie haben mehr Daten in der ETL (andere Prozesse, Dateiversionsdaten), so dass Sie die Dateien anderen Benutzern geben können und sie VIEL mehr Informationen im Vergleich zum normalen Fusionsprotokoll erhalten können
Mann, du rettest meinen Tag, ich habe ungefähr 8 Stunden gebraucht, um das Problem zu lösen. Danke vielmals. :)
Dika Arta Karunia
3
Nur eine kleine Information, die anderen helfen könnte; Wenn Sie alle Assemblys in einem Verzeichnis nach Klassen durchsuchen, die Klassen / Schnittstellen erben / implementieren, müssen Sie veraltete Assemblys bereinigen, wenn dieser Fehler bei einer Ihrer eigenen Assemblys auftritt.
Das Szenario wäre ungefähr so:
Baugruppe A lädt alle Baugruppen in einen Ordner
Assembly B in diesem Ordner ist veraltet, verweist jedoch auf Assembly C.
Assembly C ist vorhanden, aber Namespaces, Klassennamen oder andere Details haben sich möglicherweise in der Zeit geändert, die vergangen ist, seit Assembly B veraltet ist (in meinem Fall wurde ein Namespace durch einen Refactoring-Prozess geändert).
Kurzum: A --- lädt -> B (veraltet) --- Referenzen ---> C.
In diesem Fall ist das einzige verräterische Zeichen der Namespace und der Klassenname in der Fehlermeldung. Untersuche es genau. Wenn Sie es in Ihrer Lösung nirgendwo finden, versuchen Sie wahrscheinlich, eine veraltete Baugruppe zu laden.
Nur für den Fall, dass Sie sich über den Speicherort von FusionLog.exe wundern - Sie wissen, dass Sie ihn haben, aber Sie können ihn nicht finden? Ich habe in den letzten Jahren immer wieder nach FUSLOVW gesucht. Nach dem Wechsel zu .NET 4.5 ist die Anzahl der Versionen von FUSION LOG explodiert. Je nachdem, welche Software Sie installiert haben, befinden sich diese auf Ihrer Festplatte:
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
fuslogvw.exe
als Administrator ausgeführt werden, um Rechteprobleme zu vermeiden.Antworten:
Fügen Sie die folgenden Werte hinzu
Stellen Sie sicher, dass Sie den Backslash nach dem Ordnernamen einfügen und dass der Ordner vorhanden ist .
Sie müssen das ausgeführte Programm neu starten, um das Lesen dieser Registrierungseinstellungen zu erzwingen.
Vergessen Sie übrigens nicht, die Fusionsprotokollierung zu deaktivieren, wenn sie nicht benötigt wird.
quelle
Normalerweise verwende ich den Fusion Log Viewer ( Fuslogvw.exe über eine Visual Studio-Eingabeaufforderung oder Fusion Log Viewer über das Startmenü). Mein Standard-Setup lautet:
c:\FusionLogs
( Wichtig: Stellen Sie sicher, dass Sie diesen Ordner tatsächlich im Dateisystem erstellt haben.)Denken Sie daran, die Abmeldung zu deaktivieren, wenn Sie fertig sind!
(Ich habe dies gerade zu einer ähnlichen Frage gepostet - ich denke, es ist auch hier relevant.)
quelle
fuslogvw
nicht nur als Administrator ausgeführt werden, sondern auch über den richtigen Windows SDK-Pfad, den das Visual Studio-Projekt verwendet, das die Ausnahme auslöst. Überprüfen Sie das csproj und suchen Sie nach SDK (mein SDK-Knoten heißtTargetFrameworkSDKToolsDirectory
). Die Verwendung einer nicht passenden fuslogvw-Version scheint die Ausnahmen nicht zu erfassen (was Sinn macht ...)Wenn Sie das Windows SDK auf Ihrem Computer installiert haben, finden Sie den "Fusion Log Viewer" unter Microsoft SDK \ Tools (geben Sie einfach "Fusion" im Startmenü unter Vista oder Windows 7/8 ein). Starten Sie es, klicken Sie auf die Schaltfläche Einstellungen und wählen Sie "Protokollbindungsfehler" 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".
quelle
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, im Windows Registry Editor-Format:
Führen Sie dann die Datei im Windows Explorer aus und ignorieren Sie die Warnung vor möglichen Schäden.
quelle
Sie können dieses Powershell-Skript als Administrator ausführen, um FL zu aktivieren:
und dieses zu deaktivieren:
quelle
c:\FusionLog
Verzeichnisses hinzugefügt, damit die Leute das nicht vergessen ;-)Das Änderungsskript des Fusion Log Settings Viewer ist nicht der beste Weg, dies zu tun.
In ASP.NET war es manchmal schwierig, dies richtig zum Laufen zu bringen. Dieses Skript funktioniert hervorragend und wurde auch in der Liste der Elektrowerkzeuge von Scott Hanselman aufgeführt . Ich persönlich habe es jahrelang benutzt und es hat mich nie im Stich gelassen.
quelle
Anstatt eine hässliche Protokolldatei zu verwenden, können Sie das Fusion-Protokoll auch über ETW / xperf aktivieren, indem Sie den DotnetRuntime Private Provider (
Microsoft-Windows-DotNETRuntimePrivate
) mit aktivierter GUID763FD754-7086-4DFE-95EB-C01A46FAF4CA
und demFusionKeyword
Schlüsselwort (0x4) aktivieren.Wenn Sie jetzt die ETL-Datei in PerfView öffnen und in der Ereignistabelle nachsehen, finden Sie die Fusion-Daten:
quelle
Ich habe einen Assembly Binding Log Viewer namens Fusion ++ geschrieben und auf GitHub gestellt .
Sie können die neueste Version hier oder überocolatey (
choco install fusionplusplus
) erhalten.Ich hoffe, Sie und einige der Besucher hier können damit einige lebenslange Minuten sparen.
quelle
Wenn Sie die Protokollierung bereits aktiviert haben und dieser Fehler unter Windows 7 64-Bit weiterhin auftritt, versuchen Sie dies in IIS 7.5:
Erstellen Sie einen neuen Anwendungspool
Wechseln Sie zu den erweiterten Einstellungen dieses Anwendungspools
Setzen Sie die Option 32-Bit-Anwendung aktivieren auf True
Zeigen Sie mit Ihrer Webanwendung auf diesen neuen Pool
quelle
Nur eine kleine Information, die anderen helfen könnte; Wenn Sie alle Assemblys in einem Verzeichnis nach Klassen durchsuchen, die Klassen / Schnittstellen erben / implementieren, müssen Sie veraltete Assemblys bereinigen, wenn dieser Fehler bei einer Ihrer eigenen Assemblys auftritt.
Das Szenario wäre ungefähr so:
Kurzum: A --- lädt -> B (veraltet) --- Referenzen ---> C.
In diesem Fall ist das einzige verräterische Zeichen der Namespace und der Klassenname in der Fehlermeldung. Untersuche es genau. Wenn Sie es in Ihrer Lösung nirgendwo finden, versuchen Sie wahrscheinlich, eine veraltete Baugruppe zu laden.
quelle
Für diejenigen, die etwas faul sind, empfehle ich, diese Datei als Bat-Datei auszuführen, wenn Sie sie aktivieren möchten:
quelle
Nur für den Fall, dass Sie sich über den Speicherort von FusionLog.exe wundern - Sie wissen, dass Sie ihn haben, aber Sie können ihn nicht finden? Ich habe in den letzten Jahren immer wieder nach FUSLOVW gesucht. Nach dem Wechsel zu .NET 4.5 ist die Anzahl der Versionen von FUSION LOG explodiert. Je nachdem, welche Software Sie installiert haben, befinden sich diese auf Ihrer Festplatte:
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
quelle
In meinem Fall hat geholfen, den Datenträgernamen in Kleinbuchstaben einzugeben
Falsch - C: \ someFolder
Richtig - c: \ someFolder
quelle