Jak włączyć rejestrowanie błędów łączenia zestawów (Fusion) w .NET?
fuslogvw.exe
jako administrator, aby uniknąć problemów z prawami.
Jak włączyć rejestrowanie błędów łączenia zestawów (Fusion) w .NET?
fuslogvw.exe
jako administrator, aby uniknąć problemów z prawami.
Odpowiedzi:
Dodaj następujące wartości do
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion Dodaj: Wartość DWORD ForceLog ustawiona na 1 DWORD LogFailures ustaw wartość na 1 DWORD LogResourceBinds ustaw wartość na 1 DWORD EnableLog ustaw wartość na 1 Ciąg LogPath ustawia wartość folderu dla dzienników (np. C: \ FusionLog \)
Upewnij się, że wstawiłeś ukośnik odwrotny po nazwie folderu i że folder istnieje .
Musisz ponownie uruchomić uruchomiony program, aby wymusić odczytanie tych ustawień rejestru.
Nawiasem mówiąc, nie zapomnij wyłączyć rejestrowania syntezy jądrowej, gdy nie jest to potrzebne.
Zwykle używam Fusion Log Viewer ( Fuslogvw.exe z wiersza polecenia Visual Studio lub Fusion Log Viewer z menu Start) - moja standardowa konfiguracja to:
c:\FusionLogs
( Ważne: upewnij się, że rzeczywiście utworzyłeś ten folder w systemie plików).Pamiętaj, aby po zakończeniu wylogować się!
(Właśnie zamieściłem to na podobne pytanie - myślę, że jest to również istotne tutaj.)
fuslogvw
nie tylko jako administrator, ale także z właściwej ścieżki Windows SDK, z której korzysta projekt Visual Studio zgłaszający wyjątek. Sprawdź jego csproj i wyszukaj SDK wewnątrz (mój węzeł sdk ma nazwę TargetFrameworkSDKToolsDirectory
). Korzystanie z non wersję dopasowanie fuslogvw zdaje się nie złapać wyjątki (co ma sens ...)
Jeśli masz zainstalowany Windows SDK na swoim komputerze, znajdziesz „Fusion Log Viewer” pod Microsoft SDK \ Tools (po prostu wpisz „Fusion” w menu Start w systemie Vista lub Windows 7/8). Uruchom go, kliknij przycisk Ustawienia i wybierz „Rejestruj niepowodzenie powiązania” lub „Zaloguj wszystkie powiązania”.
Jeśli te przyciski są wyłączone, wróć do menu Start, kliknij prawym przyciskiem myszy Log Viewer i wybierz „Uruchom jako administrator”.
Ustaw następującą wartość rejestru:
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion! EnableLog] (DWORD) na 1
Aby wyłączyć, ustaw na 0 lub usuń wartość.
[edycja]: Zapisz następujący tekst w pliku, np. FusionEnableLog.reg, w formacie Windows Registry Editor:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
"EnableLog"=dword:00000001
Następnie uruchom plik z Eksploratora Windows i zignoruj ostrzeżenie o możliwych uszkodzeniach.
Możesz uruchomić ten skrypt Powershell jako administrator, aby włączyć 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
i ten, aby wyłączyć:
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
reż., Żeby ludzie tego nie zapomnieli ;-)
Skrypt zmieniarka Fusion Log Settings Viewer to nie bar najlepszy sposób, aby to zrobić.
W ASP.NET czasami trudno było to poprawnie uruchomić. Ten skrypt działa świetnie i znalazł się również na liście Power Tool Scotta Hanselmana . Używam go osobiście od lat i nigdy mnie nie zawiódł.
Zamiast używać brzydkiego pliku dziennika, możesz także aktywować dziennik Fusion poprzez ETW / xperf , włączając Prywatnego dostawcę DotnetRuntime ( Microsoft-Windows-DotNETRuntimePrivate
) z GUID 763FD754-7086-4DFE-95EB-C01A46FAF4CA
i FusionKeyword
włączonym słowem kluczowym (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
Kiedy teraz otworzysz plik ETL w PerfView i zajrzysz pod tabelę Zdarzenia, możesz znaleźć dane Fusion:
Napisałem przeglądarkę dziennika powiązań o nazwie Fusion ++ i umieściłem ją na GitHub .
Możesz pobrać najnowsze wydanie stąd lub przez chocolatey ( choco install fusionplusplus
).
Mam nadzieję, że Ty i niektórzy odwiedzający możecie zaoszczędzić dzięki temu cenne minuty życia.
Jeśli masz już włączone rejestrowanie i nadal pojawia się ten błąd w 64-bitowym systemie Windows 7, wypróbuj to w IIS 7.5:
Utwórz nową pulę aplikacji
Przejdź do ustawień zaawansowanych tej puli aplikacji
Ustaw Enable 32-Bit Application na True
Wskaż swoją aplikację internetową, aby korzystała z tej nowej puli
Tylko odrobina informacji, które mogą pomóc innym; jeśli robisz coś w stylu przeszukiwania wszystkich zestawów w jakimś katalogu w poszukiwaniu klas, które dziedziczą / implementują klasy / interfejsy, to upewnij się, że wyczyściłeś przestarzałe zestawy, jeśli pojawi się błąd dotyczący jednego z twoich zestawów.
Scenariusz wyglądałby następująco:
W skrócie: A --- ładunki -> B (nieaktualne) --- referencje ---> C
W takim przypadku jedynym znakiem rozpoznawczym jest przestrzeń nazw i nazwa klasy w komunikacie o błędzie. Zbadaj to dokładnie. Jeśli nie możesz znaleźć go nigdzie w swoim rozwiązaniu, prawdopodobnie próbujesz załadować nieaktualny zestaw.
Osobom nieco leniwym zalecam uruchomienie tego pliku jako pliku nietoperza, gdy tylko chcesz go włączyć:
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
Na wszelki wypadek zastanawiasz się nad lokalizacją FusionLog.exe - wiesz, że ją masz, ale nie możesz jej znaleźć? W ciągu ostatnich kilku lat szukałem FUSLOVW w kółko. Po przejściu do .NET 4.5 wybuchła liczba wersji FUSION LOG. Są to miejsca, w których można je znaleźć na dysku, w zależności od zainstalowanego oprogramowania:
C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Tools \ x64
C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ x64
C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Tools \ x64
C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Narzędzia
C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Narzędzia
C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin