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

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

1.11.2008 08:58:30
Если кому-то нужно, чтобы использовать fusion logger (fuslogvw.exe), прочитайте эту статью: msdn.microsoft.com/en-us/library/e74a18c4(v=VS.100).aspx , где вы можете скачать его и другую информацию.
user1228 13.06.2011 14:51:56
@Will - спасибо, что поделились! В качестве бонуса - убедитесь, что вы работаете fuslogvw.exeот имени администратора, чтобы избежать каких-либо проблем с правами.
SliverNinja - MSFT 27.02.2012 16:41:20
@ Я не согласен с тем, что установка fuslogvw - «лучший» ответ. Если бы вы могли получить только инструмент без установки всего пакета Windows SDK в среде, которая, скорее всего, не является средой разработки, у вас был бы смысл.
Coxy 18.04.2016 05:25:51
@ Конечно, но ответ, на который вы ссылаетесь, не охватывает ничего из этого.
Coxy 19.04.2016 00:09:24
@ Будь добр, не будь таким ребяческим. Вы - один из тех, кто пытается собрать представителя, предлагая ответ, который, хотя и полезен, сообщество оценило как менее полезный, чем другие, один из которых намного проще, а другой практически такой же.
Coxy 20.04.2016 00:16:09
13 ОТВЕТОВ

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

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

85
20.05.2013 21:43:47
Не то чтобы запись, вероятно, не существовала - вам придется ее создать. По крайней мере, я сделал это, когда собирался ответить на этот вопрос незадолго до крушения этим утром :)
Jon Skeet 1.11.2008 15:54:51
Что это ! означать? Ключ или значение? Как насчет 64-битных систем?
Bruno Martinez 14.07.2009 15:21:50
на самом деле, это работает ... вам просто нужно запустить послесловие iisreset, чтобы заставить его работать.
Nick DeMayo 22.06.2010 13:02:53
@ Норман: Поскольку этот конкретный параметр используется для того, чтобы ошибки Asp.Net отображали сообщения об ошибках привязки сборки на страницах ошибок, а не для сохранения журналов в файл. @OP: +1. Отредактировано, чтобы включить файл .reg. ! Я никогда не видел ни одного формата, кроме сообщения об ошибке, которое отправило меня на эту страницу в поисках ответов.
Brian 8.02.2011 21:53:00
Вам не нужно сбрасывать IIS - только соответствующий пул приложений. Или, по крайней мере, это было все, что мне нужно было сделать.
Kenny Evitt 23.01.2015 16:54:09

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

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

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

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

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

введите описание изображения здесь

860
18.12.2019 09:37:40
Решения Гэри работали для меня, хотя я также должен был выполнить сброс IIS. Обратите внимание, я настроил это в чистой среде, где я не хотел устанавливать SDK и тому подобное.
Michhes 30.07.2010 02:21:58
Некоторые сообщили, что изменение реестра не сразу. Вы пробовали включить регистрацию Fusion и перезагрузку?
Gary Kindel 6.12.2010 20:18:38
Вам нужно перезапустить любую программу, которую вы используете, чтобы прочитать эти настройки реестра
Orion Edwards 28.03.2011 22:29:48
Fusion Log Viewer сделает все это за вас. Перейдите в Пуск -> Программы -> Visual Studio xxxx> Инструменты Visual Studio> Командная строка Visual Studio (запускается от имени администратора) и введите «fuslogvw». В настройках вы настраиваете логирование.
r3mark 4.06.2013 03:09:04
Чтобы включить / выключить ведение журнала, я создал файлы .reg, основанные на ответе Гари Кинделя: включение и отключение .
Igor Kustov 19.11.2013 07:16:49

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

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

191
2.05.2013 09:41:54
Эти кнопки отключены для меня - почему?
Tim Lovell-Smith 24.08.2010 22:11:37
@ Тим, не видел этого раньше - это может быть связано с правами администратора? Это HKEY_LOCAL_MACHINE, который изменяется в конце концов.
Samuel Jack 24.09.2010 15:35:18
«Настройки, ошибки привязки журнала» было достаточно, чтобы найти мою проблему.
pauloya 16.08.2011 12:00:04
Убедитесь, что папка позволяет доступ для записи. Журналы UAC и c: \ не очень хорошо сочетаются с журналом Fusion
Edward Wilde 20.02.2013 09:27:40
Как примечание, если кнопки отключены, перезапустите программу просмотра журнала Fusion с правами администратора.
Bruno Lopes 7.03.2013 19:33:48

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

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

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

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

269
16.07.2019 14:19:28
Обратите внимание, что в тех случаях, когда вы сами размещаете среду выполнения из нативного приложения, вам по какой-то причине потребуется использовать собственный путь к журналу, иначе вы ничего не зарегистрируете.
jpierson 4.10.2012 03:34:50
По крайней мере, в моей ситуации мне не нужно было устанавливать собственные пути к журналам. Все, что мне нужно было сделать, это включить регистрацию, например, «Записать все привязки к диску» в диалоге настроек.
Josh 31.07.2014 20:11:43
Запуск от имени администратора требовался в моем случае, иначе все параметры были отключены.
vezenkov 12.08.2016 12:32:45
Примечание: создайте папку с правами администратора!
Tabrock 10.05.2017 21:07:05
Убедитесь, что вы работаете fuslogvwне только как администратор, но и из правильного пути Windows SDK, который использует проект Visual Studio, выбрасывающий исключение. Проверьте его csproj и найдите SDK внутри (мой узел sdk назван TargetFrameworkSDKToolsDirectory). Использование несоответствующей версии fuslogvw, кажется, не улавливает исключения (что имеет смысл ...)
Veverke 12.06.2017 14:28:32

Чейнджера сценарий Fusion Log Settings просмотра это не ни один бар лучший способ сделать это.

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

20
13.05.2012 17:59:44
ps УБЕДИТЕСЬ, что вы отключите его после запуска, иначе эта папка может стать достаточно большой
Adam Tuliper - MSFT 19.09.2012 00:32:45
Вот почему я использую ETW, чтобы регистрировать данные, только если они мне действительно нужны, а не все время в уродливом большом файле журнала.
magicandre1981 3.04.2015 06:58:59

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

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

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

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

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

3
13.05.2012 18:01:04
чувак, ты спас мой день, мне понадобилось около 8 часов, чтобы решить проблему. большое спасибо. :)
Dika Arta Karunia 16.04.2020 03:03:16

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

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

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

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

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

3
18.07.2013 15:03:37

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

13
31.03.2015 17:22:02
@YuriBondarchuk это активирует его по требованию, и у вас есть больше данных в ETL (другие процессы, данные файловой версии), так что вы можете передавать файлы другим пользователям, и они могут получить НАМНОГО больше информации по сравнению с обычным журналом слияния
magicandre1981 17.09.2015 04:04:02

Вы можете запустить этот скрипт 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
79
20.06.2019 14:21:41
Спасибо! Я позволил себе поместить ваши команды в эту суть . И я добавил создание c:\FusionLogdir, чтобы люди не забыли об этом ;-)
Oliver 30.10.2015 21:44:23
Правила командной строки! Я мог бы быстро воспроизвести это, используя лучшую изобретенную до сих пор технологию повторного использования кода под названием «вырезать и вставить». Спасибо.
Remigijus Pankevičius 17.01.2019 09:32:05

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

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

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

Правильно - c: \ someFolder

0
21.01.2019 09:45:16

Для тех, кто немного ленив, я рекомендую запускать его как 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
2
8.05.2019 15:46:15

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

Вы можете получить последнюю версию здесь или через chocolatey ( choco install fusionplusplus).

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

Fusion ++

11
29.07.2019 07:45:49
Уважаемый сэр, вы бог!
Sylvain Girard 3.06.2019 10:14:30
Это удивительный инструмент, спасибо большое!
simoneL 7.02.2020 11:08:52