Jak włączyć rejestrowanie niepowodzenia wiązania zestawu (Fusion) w .NET


818

Jak włączyć rejestrowanie błędów łączenia zestawów (Fusion) w .NET?


46
Jeśli ktoś się tym przejmuje, aby użyć rejestratora syntezy (fuslogvw.exe), przeczytaj ten artykuł: msdn.microsoft.com/en-us/library/e74a18c4(v=VS.100).aspx , gdzie można go pobrać i inne informacje.

13
@Will - dzięki za udostępnienie! Jako bonus - upewnij się, że działasz fuslogvw.exejako administrator, aby uniknąć problemów z prawami.
SliverNinja - MSFT

13
@Czy nie zgadzam się, że zainstalowanie fuslogvw jest „najlepszą” odpowiedzią. Jeśli możesz dostać tylko narzędzie bez konieczności instalowania całego zestawu Windows SDK w środowisku, które prawdopodobnie nie jest środowiskiem programistycznym, miałbyś rację.
Coxy

2
@Z pewnością, ale odpowiedź, do której prowadzi link, nie obejmuje żadnej z tych kwestii.
Coxy

8
@Will Nie bądź taki dziecinny. Jesteś tym, który próbuje zebrać przedstawiciela, promując odpowiedź, która choć użyteczna, społeczność uznała za mniej pomocną niż inni, jedną, która jest o wiele łatwiejsza, a drugą jest praktycznie taka sama.
Coxy,

Odpowiedzi:


868

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.

wprowadź opis zdjęcia tutaj


23
Rozwiązania Gary'ego zadziałały dla mnie, chociaż musiałem też postępować, resetując IIS. Uwaga: Skonfigurowałem to w czystym środowisku, w którym nie chciałem instalować zestawów SDK i tym podobnych.
Michhes

5
Zostały zgłoszone przez niektórych, że zmiana rejestru nie zabiera od razu. Czy próbowałeś włączyć logowanie Fusion, a następnie uruchomić ponownie?
Gary Kindel,

54
Musisz ponownie uruchomić dowolny program, aby uruchomić te ustawienia rejestru
Orion Edwards

50
Fusion Log Viewer robi to wszystko za Ciebie. Przejdź do Start -> Programy -> Visual Studio xxxx> Visual Studio Tools> Visual Studio Command Prompt (uruchamiany jako administrator) i wpisz „fuslogvw”. W Ustawieniach dostosowujesz rejestrowanie.
r3mark

10
Aby włączyć / wyłączyć rejestrowanie przydatne, stworzyłem pliki .reg, które są oparte na odpowiedzi Gary'ego Kindela: włączanie i wyłączanie .
Igor Kustov

271

Zwykle używam Fusion Log Viewer ( Fuslogvw.exe z wiersza polecenia Visual Studio lub Fusion Log Viewer z menu Start) - moja standardowa konfiguracja to:

  • Otwórz Fusion Log Viewer jako administrator
  • Kliknij ustawienia
  • Sprawdź Włącz niestandardową ścieżkę dziennika wyboru
  • Wprowadź lokalizację, w której chcesz zapisać dzienniki, na przykład c:\FusionLogs( Ważne: upewnij się, że rzeczywiście utworzyłeś ten folder w systemie plików).
  • Upewnij się, że włączony jest odpowiedni poziom rejestrowania (czasami po prostu wybieram Rejestruj wszystkie powiązania na dysku, aby upewnić się, że wszystko działa poprawnie)
  • Kliknij OK
  • Ustaw opcję lokalizacji dziennika na Niestandardowy

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.)


4
Należy pamiętać, że w przypadkach, w których środowisko uruchomieniowe jest hostowane z aplikacji macierzystej, z jakiegoś powodu konieczne będzie użycie niestandardowej ścieżki dziennika, w przeciwnym razie nic nie zostanie zarejestrowane.
jpierson

Przynajmniej w mojej sytuacji tak naprawdę nie musiałem ustawiać niestandardowych ścieżek dziennika. Wszystko, co musiałem zrobić, to włączyć logowanie, np. „Zaloguj wszystkie powiązania z dyskiem” w oknie dialogowym ustawień.
Josh

42
Uruchom jako Administrator był wymagany w moim przypadku, w przeciwnym razie wszystkie opcje byłyby wyłączone.
vezenkov

2
Uwaga: utwórz folder jako Administrator!
Tabrock,

6
Upewnij się, że działasz fuslogvwnie 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 ...)
Veverke

191

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”.


6
Te przyciski są dla mnie wyłączone - dlaczego?
Tim Lovell-Smith

14
@Tim, nie widziałem tego wcześniej - czy może to mieć związek z uprawnieniami administratora? Mimo wszystko modyfikuje się HKEY_LOCAL_MACHINE.
Samuel Jack

2
„Ustawienia, niepowodzenia łączenia logów” wystarczyły, aby znaleźć mój problem.
pauloya,

1
Upewnij się, że folder umożliwia dostęp do zapisu. Dzienniki UAC ic: logi nie działają dobrze z logiem syntezy
Edward Wilde

4
Dla przypomnienia, jeśli przyciski są wyłączone, uruchom ponownie przeglądarkę dziennika połączeń z uprawnieniami administratora.
Bruno Lopes,

86

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.


4
Nie oznacza to, że wpis prawdopodobnie nie będzie istniał - musisz go utworzyć. Przynajmniej zrobiłem, kiedy miałem odpowiedzieć na to pytanie tuż przed katastrofą dziś rano :)
Jon Skeet

3
Co robi! oznaczać? Klucz czy wartość? Co z systemami 64-bitowymi?
Bruno Martinez

48
tak naprawdę to działa ... wystarczy uruchomić iisreset afterwords, aby go uruchomić.
Nick DeMayo

4
@ Norman: Ponieważ to konkretne ustawienie służy do tego, aby błędy Asp.Net wyświetlały komunikaty o błędach wiązania zespołu na stronach błędów, a nie do zapisywania dzienników w pliku. @OP: +1. Edytowano, aby dołączyć plik .reg. The! Format nigdy nie widziałem, z wyjątkiem komunikatu o błędzie, który wysłał mnie na tę stronę w poszukiwaniu odpowiedzi.
Brian

2
Nie trzeba resetować usług IIS - tylko odpowiednią pulę aplikacji. A przynajmniej tyle musiałem zrobić.
Kenny Evitt

81

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

4
Dzięki! Pozwoliłem sobie na umieszczenie twoich poleceń w tej treści . Dodałem stworzenie c:\FusionLogreż., Żeby ludzie tego nie zapomnieli ;-)
Oliver,

Zasady wiersza poleceń! Mógłbym szybko odtworzyć to przy użyciu najlepiej opracowanej do tej pory technologii wielokrotnego użytku kodu o nazwie „Wytnij i wklej”. Dzięki.
Remigijus Pankevičius

20

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ł.


ps UPEWNIJ SIĘ, że
wyłączasz

dlatego używam ETW, aby rejestrować dane tylko wtedy, gdy naprawdę ich potrzebuję, a nie cały czas w brzydkim dużym pliku dziennika.
magicandre1981

13

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-C01A46FAF4CAi FusionKeywordwłą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:

Wydarzenia fuzji w PerfView


@YuriBondarchuk aktywuje go na żądanie i masz więcej danych w ETL (inne procesy, dane filtrowania), dzięki czemu możesz przekazać pliki innym użytkownikom i mogą uzyskać DUŻO więcej informacji w porównaniu do zwykłego dziennika syntezy
magicandre1981

12

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.

Fusion ++


1
Szanowny Panie, jesteś bogiem!
Sylvain Girard

1
To niesamowite narzędzie, dziękuję bardzo!
simoneL

3

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:

  1. Utwórz nową pulę aplikacji

  2. Przejdź do ustawień zaawansowanych tej puli aplikacji

  3. Ustaw Enable 32-Bit Application na True

  4. Wskaż swoją aplikację internetową, aby korzystała z tej nowej puli


stary, ratujesz mi dzień, zajęło mi to około 8 godzin, aby rozwiązać problem. Wielkie dzięki. :)
Dika Arta Karunia

3

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:

  1. Zespół A ładuje wszystkie zestawy w pewnym folderze
  2. Zestaw B w tym folderze jest nieaktualny, ale odwołuje się do zestawu C
  3. Zestaw C istnieje, ale przestrzenie nazw, nazwy klas lub inne szczegóły mogły ulec zmianie w czasie, który upłynął od czasu, gdy zestaw B stał się nieaktualny (w moim przypadku przestrzeń nazw została zmieniona w procesie refaktoryzacji)

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.


3

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

1

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


0

W moim przypadku pomogłem wpisać nazwę dysku małymi literami

Źle - C: \ someFolder

Prawidłowo - c: \ someFolder

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.