it-swarm.com.ru

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

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

748
user32736

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

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion 
 Добавить: 
 DWORD ForceLog установить значение 1 
 DWORD LogFailures установить значение 1 
 DWORD LogResourceBinds установить значение 1 
 DWORD EnableLog установить значение равным 1 1 
 String LogPath установить значение папки для журналов (например, C:\FusionLog \) 

Убедитесь, что вы включили обратную косую черту после имени папки и что Папка существует

Вам нужно перезапустить программу, которую вы запускаете, чтобы заставить ее читать эти параметры реестра.

Кстати, не забудьте отключить Fusion Logging, когда это не нужно. 

782
Gary Kindel

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

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

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

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

238
Mike Goatly

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

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

184
Samuel Jack

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

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

82
user32736

Вы можете запустить этот скрипт 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
62
Tereza Tomcova

Скрипт смены Fusion Log Settings Viewer не лучший способ сделать это. 

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

19
Adam Tuliper - MSFT

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

10
magicandre1981

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

Сценарий будет что-то вроде:

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

Короче говоря: A --- нагрузки -> B (устаревшие) --- ссылки ---> C

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

3
andrerav

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

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

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

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

  4. Укажите ваше веб-приложение, чтобы использовать этот новый пул

2
Adam Mendoza

На всякий случай, если вам интересно узнать, где находится файл 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

1
Dikshit Kathuria

В моем случае помогло ввести имя диска в нижнем регистре

Неправильно - C:\someFolder

Исправить - c:\someFolder

0
Vlad

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

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

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

 Fusion++

0
Waescher

Для тех, кто немного ленив, я рекомендую запускать его как 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
0
Igor Meszaros