Как включить ведение журнала сбоев привязки сборки (Fusion) в .NET?
Как включить ведение журнала сбоев сборки (Fusion) в .NET.
Ответ 1
Добавьте следующие значения в
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\)
Убедитесь, что включить обратную косую черту после имени папки и Папка существует.
Вам необходимо перезапустить программу, которую вы используете, чтобы заставить ее прочитать эти параметры реестра.
BTW, не забудьте выключить слияние, если не нужно.
Ответ 2
Я обычно использую Fusion Log Viewer (Fuslogvw.exe из командной строки Visual Studio или Fusion Log Viewer из меню "Пуск") - моя стандартная настройка:
- Откройте Fusion Log Viewer от имени администратора
- Нажмите Настройки
- .Установите флажок Включить пользовательский путь к журналу checkbox
- .Введите местоположение, в которое вы хотите записывать журналы, например,
c:\FusionLogs
(Важно: убедитесь, что вы действительно создали эту папку в файловой системе.) - Убедитесь, что включен правильный уровень ведения журнала (иногда я просто выбираю Записывать все привязки на диск, чтобы убедиться, что все работает правильно)
- Нажмите ОК
- Установите для местоположения журнала значение Пользовательский
Не забудьте выключить выход, как только вы закончите!
(Я только что опубликовал это на похожем вопросе - я думаю, что это актуально и здесь.)
Ответ 3
Если на вашем компьютере установлен SDK Windows, вы найдете "Средство просмотра журнала Fusion" в Microsoft SDK\Tools (просто введите "Fusion" в меню "Пуск" в Vista или Windows 7/8). Запустите его, нажмите кнопку "Параметры" и выберите "Ошибка связывания журнала" или "Записать все привязки".
Если эти кнопки отключены, вернитесь в меню "Пуск", щелкните правой кнопкой мыши "Просмотр журнала" и выберите "Запуск от имени администратора".
Ответ 4
Задайте следующее значение реестра:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion! EnableLog] (DWORD) до 1
Чтобы отключить, установите значение 0 или удалите значение.
[edit]: Сохраните следующий текст в файле, например FusionEnableLog.reg, в Формат редактора реестра Windows:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
"EnableLog"=dword:00000001
Затем запустите файл из проводника Windows и проигнорируйте предупреждение о возможном повреждении.
Ответ 5
Вы можете запустить этот скрипт 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
Ответ 6
Fusion Log Settings Viewer changer script не лучший способ сделать это.
В ASP.NET время от времени было сложно, чтобы это работало правильно. Этот script отлично работает и был включен в список Скотта Hanselman Power Tool. Я лично использовал его в течение многих лет, и это никогда не подводило меня.
Ответ 7
Вместо использования уродливого файла журнала вы также можете активировать журнал 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:
Ответ 8
Я написал средство просмотра журнала привязки сборки с именем Fusion++ и поместил его на GitHub.
Вы можете получить последнюю версию от здесь или через шоколад (choco install fusionplusplus
).
Я надеюсь, что вы и некоторые посетители здесь сможете сэкономить на этом несколько достойных минут жизни.
Ответ 9
Просто крошечная информация, которая может помочь другим; если вы что-то делаете в поисках всех сборок в каком-то каталоге для классов, наследующих/реализующих классы/интерфейсы, тогда убедитесь, что вы очищаете устаревшие сборки, если вы получаете эту ошибку, относящуюся к одной из ваших собственных сборок.
Сценарий будет выглядеть примерно так:
- Сборка A загружает все сборки в какой-либо папке
- Сборка B в этой папке устарела, но ссылка на сборку C
- Сборка C существует, но пространства имен, имена классов или некоторые другие детали могут измениться за время, прошедшее после того, как сборка B стала устаревшей (в моем случае пространство имен было изменено с помощью процесса рефакторинга)
Короче: A --- нагрузки → B (устаревшие) --- ссылки --- > C
Если это произойдет, единственным признаком соответствия является пространство имен и имя класса в сообщении об ошибке. Осмотрите его внимательно. Если вы не можете найти его в своем решении, вы, вероятно, попытаетесь загрузить устаревшую сборку.
Ответ 10
Если вы уже включили ведение журнала и все еще получаете эту ошибку в 64-разрядной версии Windows 7, попробуйте это в IIS 7.5:
-
Создайте новый пул приложений
-
Перейдите к дополнительным настройкам пула приложений
-
Установите для параметра "Включить 32-разрядное приложение" значение "Истина"
-
Направьте ваше веб-приложение на использование этого нового пула
Ответ 11
На всякий случай, если вам интересно узнать, где находится 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
Ответ 12
Для тех, кто немного ленив, я рекомендую запускать его как 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
Ответ 13
В моем случае помогло ввести имя диска в нижнем регистре
Неправильно - C:\someFolder
Правильно - c:\someFolder