Как включить ведение журнала ошибок привязки сборки (Fusion) в .NET - PullRequest
765 голосов
/ 01 ноября 2008

Как включить ведение журнала ошибок привязки сборки (Fusion) в .NET?

Ответы [ 13 ]

804 голосов
/ 06 октября 2009

Добавьте следующие значения к

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, когда она не нужна.

247 голосов
/ 15 июля 2010

Я обычно использую Fusion Log Viewer ( Fuslogvw.exe из командной строки Visual Studio или Fusion Log Viewer из меню Пуск) - мои стандартные настройки:

  • Открыть Fusion Log Viewer от имени администратора
  • Нажмите Настройки
  • Установите флажок Включить пользовательский путь к журналу флажок
  • Введите местоположение, в которое вы хотите записывать журналы, например, c:\FusionLogs ( Важно: убедитесь, что вы действительно создали эту папку в файловой системе.)
  • Убедитесь, что включен правильный уровень ведения журнала (иногда я просто выбираю Записывать все привязки на диск , чтобы убедиться, что все работает правильно)
  • Нажмите OK
  • Установите для параметра местоположения журнала значение Пользов.

Не забудьте выключить систему, когда закончите!

(Я только что опубликовал это на похожем вопросе - думаю, что это также актуально здесь.)

186 голосов
/ 19 мая 2010

Если на вашем компьютере установлен Windows SDK, вы найдете «Fusion Log Viewer» в Microsoft SDK \ Tools (просто введите «Fusion» в меню «Пуск» в Vista или Windows 7/8). Запустите его, нажмите кнопку «Настройки» и выберите «Ошибка привязки журнала» или «Зарегистрировать все привязки».

Если эти кнопки отключены, вернитесь в меню «Пуск», щелкните правой кнопкой мыши Log Viewer и выберите «Запуск от имени администратора».

84 голосов
/ 01 ноября 2008

Установите следующее значение реестра:

[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 и проигнорируйте предупреждение о возможном повреждении.

66 голосов
/ 08 октября 2015

Вы можете запустить этот скрипт 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
19 голосов
/ 21 октября 2011

Сценарий средства смены средства просмотра журнала Fusion *1002* - не лучший способ сделать это.

В ASP.NET иногда было сложно заставить его работать правильно. Этот скрипт прекрасно работает и был также включен в список Power Tool Скотта Хансельмана. Я лично использовал это в течение многих лет, и это никогда не подводило меня.

12 голосов
/ 31 марта 2015

Вместо использования некрасивого файла журнала вы также можете активировать журнал 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 events in PerfView

3 голосов
/ 18 июля 2013

Просто немного информации, которая может помочь другим; если вы делаете что-то вроде поиска во всех сборках в некотором каталоге классов, которые наследуют / реализуют классы / интерфейсы, то убедитесь, что вы удаляете устаревшие сборки, если вы получаете эту ошибку, относящуюся к одной из ваших собственных сборок.

Сценарий будет выглядеть примерно так:

  1. Сборка A загружает все сборки в какую-то папку
  2. Сборка B в этой папке устарела, но ссылки на сборку C
  3. Сборка C существует, но пространства имен, имена классов или некоторые другие детали могли измениться за время, прошедшее с того момента, как сборка B устарела (в моем случае пространство имен было изменено в процессе рефакторинга)

Вкратце: A --- нагрузки -> B (устаревшие) --- ссылки ---> C

Если это происходит, единственным сигнальным знаком является пространство имен и имя класса в сообщении об ошибке. Изучите это внимательно. Если вы не можете найти его в своем решении, скорее всего, вы пытаетесь загрузить устаревшую сборку.

2 голосов
/ 10 мая 2019

Поскольку мой твит о Fusion ++ получил ретвит от самого Скотта Хансельмана, думаю, я достаточно уверен, чтобы рассказать вам об этом.

Я написал программу просмотра журнала привязки сборок с именем Fusion ++ и поместил ее на GitHub .

Я надеюсь, что вы и некоторые посетители здесь сможете сэкономить несколько достойных минут жизни.

Fusion++

2 голосов
/ 18 апреля 2012

Если у вас уже включено ведение журнала и вы все еще получаете эту ошибку в 64-разрядной версии Windows 7, попробуйте это в IIS 7.5:

  1. Создание нового пула приложений

  2. Перейти к расширенным настройкам этого пула приложений

  3. Установите Включить 32-разрядное приложение на True

  4. Укажите ваше веб-приложение для использования этого нового пула

...