Как включить ведение журнала ошибок привязки сборки (Fusion) в. СЕТЬ?
Как включить ведение журнала ошибок привязки сборки (Fusion) в. СЕТЬ?
Добавьте следующие значения в
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion Add: DWORD ForceLog set value to 1 DWORD LogFailures set value to 1 DWORD LogResourceBinds set value to 1 DWORD EnableLog set value to 1 String LogPath set value to folder for logs (e.g. C:\FusionLog\)
Убедитесь, что вы включили обратную косую черту после имени папки и что папка существует .
Вам нужно перезапустить запущенную программу, чтобы заставить ее прочитать эти параметры реестра.
Кстати, не забудьте отключить регистрацию Fusion, когда она не нужна.
Я обычно использую Fusion Log Viewer ( Fuslogvw. EXE из командной строки Visual Studio или Fusion Log Viewer из меню Пуск) - моя стандартная установка:
c:\FusionLogs
( Важно: убедитесь, что вы действительно создали эту папку в файловой системе. )Не забудьте выключить выход, как только вы закончите!
(Я только что опубликовал это по аналогичному вопросу - я думаю, что это актуально и здесь. )
Если на вашем компьютере установлен Windows SDK, вы найдете «Fusion Log Viewer» в Microsoft SDK \ Tools (просто введите «Fusion» в меню «Пуск» в Vista или Windows 7/8). Запустите его, нажмите кнопку «Настройки» и выберите «Журнал ошибок привязки» или «Журнал всех привязок».
Если эти кнопки отключены, вернитесь в меню «Пуск», щелкните правой кнопкой мыши Log Viewer и выберите «Запуск от имени администратора».
Установите следующее значение реестра:
[HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Fusion! EnableLog] (DWORD) для 1
Чтобы отключить, установите 0 или удалите значение.
[править]: сохранить следующий текст в файл, e. g Fusion EnableLog. рег, в Формат редактора реестра 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
Примечание. Убедитесь, что каталог, указанный для записи LogPath, существует. Если каталог не существует, то ваши журналы не будут доступны для поиска.
и отключить этот:
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 не является лучшим способом сделать это.
В 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:
Небольшая информация, которая может помочь другим; если вы делаете что-то вроде поиска всех сборок в некотором каталоге для классов, которые наследуют / реализуют классы / интерфейсы, то убедитесь, что вы очищаете устаревшие сборки, если вы получаете эту ошибку, относящуюся к одной из ваших собственных сборок.
Сценарий будет что-то вроде:
Вкратце: A --- загружает - & gt; B (устаревший) --- ссылки --- & gt; C
Если это происходит, единственным контрольным знаком является пространство имен и имя класса в сообщении об ошибке. Изучите это внимательно. Если вы не можете найти его в своем решении, скорее всего, вы пытаетесь загрузить устаревшую сборку.
Если у вас уже включено ведение журнала и вы все еще получаете эту ошибку в 64-разрядной версии Windows 7, попробуйте это в IIS 7. 5:
Создание нового пула приложений
Перейти к расширенным настройкам этого пула приложений
Установить Включить 32-разрядное приложение на True
Укажите ваше веб-приложение для использования этого нового пула