Как включить ведение журнала ошибок привязки сборки (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 String LogPath устанавливает значение в папку для журналов (например, C: \ FusionLog \)
Убедитесь, что вы указали обратную косую черту после имени папки и что папка существует .
Вам нужно перезапустить программу, которую вы запускаете, чтобы заставить ее читать эти параметры реестра.
Кстати, не забудьте отключить регистрацию Fusion, когда она не нужна.
Я обычно использую Fusion Log Viewer ( Fuslogvw.exe из командной строки Visual Studio или Fusion Log Viewer из меню «Пуск») - мои стандартные настройки:
c:\FusionLogs
( Важно: убедитесь, что вы действительно создали эту папку в файловой системе.)Не забудьте выключить выход, как только вы закончите!
(Я только что опубликовал это на похожем вопросе - я думаю, что это актуально и здесь.)
fuslogvw
не только как администратор, но и из правильного пути Windows SDK, который использует проект Visual Studio, выбрасывающий исключение. Проверьте его csproj и найдите SDK внутри (мой узел sdk назван TargetFrameworkSDKToolsDirectory
). Использование несоответствующей версии fuslogvw, похоже, не улавливает исключения (что имеет смысл ...)
Если на вашем компьютере установлен Windows SDK, вы найдете «Fusion Log Viewer» в Microsoft SDK \ Tools (просто введите «Fusion» в меню «Пуск» в Vista или Windows 7/8). Запустите его, нажмите кнопку «Настройки» и выберите «Журнал ошибок привязки» или «Журнал всех привязок».
Если эти кнопки отключены, вернитесь в меню «Пуск», щелкните правой кнопкой мыши Log Viewer и выберите «Запуск от имени администратора».
Установите следующее значение реестра:
[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 и проигнорируйте предупреждение о возможном повреждении.
Вы можете запустить этот скрипт 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 .
Вы можете получить последнюю версию здесь или через chocolatey ( choco install fusionplusplus
).
Я надеюсь, что вы и некоторые посетители здесь сможете сэкономить на этом несколько достойных минут.
Если у вас уже включено ведение журнала и вы все еще получаете эту ошибку в 64-разрядной версии Windows 7, попробуйте это в IIS 7.5:
Создать новый пул приложений
Перейдите в Дополнительные настройки этого пула приложений.
Установите для параметра Включить 32-разрядное приложение значение 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: \ 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 Tools
C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Инструменты
C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin