Як увімкнути ведення журналу відмов (Fusion) в .NET?
fuslogvw.exe
в якості адміністратора, щоб уникнути будь-яких проблем з правами.
Як увімкнути ведення журналу відмов (Fusion) в .NET?
fuslogvw.exe
в якості адміністратора, щоб уникнути будь-яких проблем з правами.
Відповіді:
Додайте такі значення до
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion Додати: DWORD ForceLog встановив значення 1 DWORD LogFailures встановив значення 1 DWORD LogResourceBinds встановлює значення 1 DWORD EnableLog встановлено значенням 1 Рядок встановленого значення LogPath для папки для журналів (наприклад, C: \ FusionLog \)
Переконайтеся, що ви додаєте зворотну косу рису після назви папки та чи існує папка .
Вам потрібно перезапустити програму, яку ви запускаєте, щоб змусити її прочитати ці параметри реєстру.
До речі, не забувайте вимикати журнал синтезу, коли це не потрібно.
Зазвичай я використовую переглядач журналів Fusion ( Fuslogvw.exe з командного рядка Visual Studio або Переглядач журналів Fusion з меню "Пуск") - моя стандартна установка:
c:\FusionLogs
( Важливо: переконайтеся, що ви фактично створили цю папку у файловій системі.)Не забудьте вимкнути вихід із системи, як тільки ви закінчите!
(Я щойно опублікував це на подібне запитання - я думаю, що це теж актуально.)
fuslogvw
не лише як адміністратор, але й правильний шлях SDK для Windows, який використовує проект Visual Studio, який викидає виняток. Перевірте його csproj і знайдіть SDK всередині (мій вузол sdk названий TargetFrameworkSDKToolsDirectory
). Використання невідповідної версії fuslogvw, здається, не сприймає винятків (що має сенс ...)
Якщо на вашому комп'ютері встановлено пакет SDK для Windows, ви знайдете "Переглядач журналів Fusion" в розділі Microsoft SDK \ Tools (просто введіть "Fusion" у меню "Пуск" на Vista або Windows 7/8). Запустіть його, натисніть кнопку "Налаштування" та виберіть "Помилка журналу помилок" або "Журнал усіх прив'язок".
Якщо ці кнопки відключені, поверніться до меню «Пуск», клацніть правою кнопкою миші Переглядач журналів і виберіть «Запустити як адміністратор».
Встановіть таке значення реєстру:
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion! EnableLog] (DWORD) до 1
Щоб відключити, встановіть значення 0 або видаліть значення.
[редагувати]: Збережіть наступний текст у файлі, наприклад, FusionEnableLog.reg, у форматі редактора реєстру Windows:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
"EnableLog"=dword:00000001
Потім запустіть файл з Windows Explorer і проігноруйте попередження про можливі пошкодження.
Ви можете запустити цей скрипт Powershell як адміністратор, щоб увімкнути 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
і цей відключити:
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
Чейнджера сценарій Fusion Log Settings перегляду це не жоден бар кращий спосіб зробити це.
В ASP.NET часом непросто було змусити це правильно працювати. Цей сценарій чудово працює і був занесений до списку електроінструментів Скотта Хензельмана . Я особисто ним користувався роками, і це ніколи мене не підводило.
Замість використання потворного файлу журналу, ви також можете активувати журнал Fusion через ETW / xperf , включивши приватний провайдер DotnetRuntime ( Microsoft-Windows-DotNETRuntimePrivate
) з GUID 763FD754-7086-4DFE-95EB-C01A46FAF4CA
та FusionKeyword
ключовим словом (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
Коли ви тепер відкриєте файл ETL в PerfView і заглянете в таблицю Події, ви можете знайти дані Fusion:
Я написав переглядач журналів збірки журналів на ім'я Fusion ++ і помістив його на GitHub .
Ви можете отримати останню версію звідси або за допомогою шоколаду ( choco install fusionplusplus
).
Я сподіваюся, що ви та деякі відвідувачі тут зможете заощадити кілька гідних хвилин життя.
Якщо у вас вже ввімкнено журнал, і ви все ще отримуєте цю помилку в Windows 7 64 біт, спробуйте це в IIS 7.5:
Створіть новий пул програм
Перейдіть до розширених налаштувань цього пулу програм
Встановіть 32-бітну програму Enable на True
Наведіть веб-додаток на використання цього нового пулу
Просто невеликий шматочок інформації, який може допомогти іншим; якщо ви робите щось за принципом пошуку всіх збірок у деякому каталозі для класів, які успадковують / реалізують класи / інтерфейси, тоді переконайтеся, що ви очистили несвіжі збірки, якщо ви отримаєте цю помилку, що стосується однієї з ваших власних збірок.
Сценарій був би таким:
Якщо коротко: A --- завантажує -> B (несвіжий) --- посилання ---> C
Якщо це трапляється, єдиним сигнальним сигналом є простір імен та ім’я класу у повідомленні про помилку. Вивчіть його уважно. Якщо ви не можете знайти його де-небудь у своєму рішенні, ви, ймовірно, намагаєтесь завантажити черствий вузол.
Для тих, хто трохи ледачий, я рекомендую запустити це у вигляді файлу bat, коли коли-небудь захочете його ввімкнути:
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
Про всяк випадок, коли вам цікаво розташування FusionLog.exe - ви знаєте, що у вас є, але ви не можете його знайти? Я шукав FUSLOVW в останні кілька років знову і знову. Після переходу на .NET 4.5 кількість версій FUSION LOG вибухнула. Її місця можна знайти на диску, залежно від встановленого програмного забезпечення:
C: \ Програмні файли (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Інструменти \ x64
C: \ програмні файли (x86) \ Microsoft SDKs \ Windows \ v7.0A \ bin \ x64
C: \ Програмні файли (x86) \ Microsoft SDK \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Інструменти \ x64
C: \ Файли програми (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Інструменти
C: \ Програмні файли (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Інструменти
C: \ Програмні файли (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin