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

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

Если кому-то интересно, чтобы использовать fusion logger (fuslogvw.exe), прочтите эту статью: msdn.microsoft.com/en-us/library/e74a18c4(v=VS.100).aspx он сообщает вам, где его скачать, и другую информацию.

user1228 13.06.2011 18:51

@Will - спасибо, что поделились! В качестве бонуса - убедитесь, что вы запускаете fuslogvw.exe от имени администратора, чтобы избежать проблем с правами.

SliverNinja - MSFT 27.02.2012 20:41

В качестве соответствующего примечания не забудьте выключить регистратор слияния (fuslogvw.exe), когда закончите. В моей папке "C: \ Windows \ ... \ Temporary Internet Files \" было 4 миллиона журналов. Общий размер всех файлов составлял 6 ГиБ, но поскольку они были намного меньше размера кластера, фактическое использованное дисковое пространство составляло 16 ГиБ.

tehDorf 05.04.2016 22:45

@ Я не согласен с тем, что установка fuslogvw - «лучший» ответ. Если бы вы могли получить только этот инструмент без необходимости устанавливать весь Windows SDK в среде, которая, скорее всего, не является средой разработки, тогда вы были бы правы.

Coxy 18.04.2016 08:25

@Will Конечно, но ответ, на который вы ссылаетесь, не охватывает ничего из этого.

Coxy 19.04.2016 03:09

@Coxy Это обязательно? Неужели он действительно должен скрывать очевидное? Возможно, вам стоит отредактировать его и включить эту важную информацию. Что касается этого разговора, я должен попрощаться с ним. Доброго вам дня, сэр.

user1228 19.04.2016 16:06

@Will Пожалуйста, не будьте такими ребячливыми. Вы тот, кто пытается собрать репутацию, продвигая ответ, который, хотя и полезен, сообщество сочло менее полезным, чем другие, один из которых намного проще, а другой практически такой же.

Coxy 20.04.2016 03:16

@Coxy лучший ответ - использовать ETW для отслеживания его по запросу, а не постоянно: stackoverflow.com/a/29374658/1466046 Здесь вы можете передать файл на другой компьютер и проанализировать его подробно (также событие загрузки изображения + стеки вызовов). Это НАМНОГО глубже по сравнению со старым журналом слияния.

magicandre1981 10.06.2016 07:34

@Coxy, имеющий отполированный логгер Fusion без Windows SDK, возможен: stackoverflow.com/a/56067961/704281

Waescher 26.07.2019 16:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
849
9
470 950
13

Ответы 13

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

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

Не то чтобы запись, вероятно, не существовала - вам придется ее создать. По крайней мере, я ответил, когда собирался ответить на этот вопрос прямо перед аварией сегодня утром :)

Jon Skeet 01.11.2008 18:54

Что это ! иметь в виду? Ключ или значение? А как насчет 64-битных систем?

Bruno Martinez 14.07.2009 19:21

это на самом деле не работает. значение ForceLog, а не EnableLog, и здесь требуется дополнительный шаг (см .: thepursuitofalife.com/…)

Marchy 17.11.2009 01:04

на самом деле, это действительно работает ... вам просто нужно запустить iisreset afterwords, чтобы заставить его работать.

Nick DeMayo 22.06.2010 17:02

iisreset? Действительно? Зачем вам сбросить IIS, чтобы заставить работать ведение журнала привязки Fusion?

Norman H 08.07.2010 23:55

@Norman: потому что этот конкретный параметр используется для того, чтобы ошибки Asp.Net отображали сообщения об ошибках привязки сборки на страницах ошибок, а не для сохранения журналов в файл. @OP: +1. Отредактировано, чтобы включить файл .reg. ! формат - это тот, который я никогда не видел, за исключением сообщения об ошибке, которое отправило меня на эту страницу в поисках ответов.

Brian 09.02.2011 00:53

Вам не нужно сбрасывать IIS - только соответствующий пул приложений. По крайней мере, это все, что мне нужно было сделать.

Kenny Evitt 23.01.2015 19:54

что такое формат редактора реестра Windows:?

Shesha 30.03.2016 08:36

Ссылка Марки должна идти на docs.microsoft.com/en-us/previous-versions/dotnet/…

Ian Kemp 04.07.2018 12:47

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

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\)

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

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

Кстати, не забывайте отключать ведение журнала слияния, когда оно не нужно.

Я добавил эти записи, но мой C# express (2010) по-прежнему сообщает мне, что «Ведение журнала привязки сборки отключено». Как заставить работать?

newman 11.11.2010 05:27

Некоторые сообщают, что изменение реестра не сразу. Вы пробовали включить вход в Fusion, а затем перезагрузиться?

Gary Kindel 06.12.2010 23:18

Вам необходимо перезапустить любую запущенную программу, чтобы она могла прочитать эти настройки реестра.

Orion Edwards 29.03.2011 02:29

Решения Гэри сработали для меня, хотя мне также пришлось выполнить сброс IIS. Обратите внимание, что я настроил это в чистой среде, где я не хотел устанавливать SDK и тому подобное.

Michhes 30.07.2010 06:21

Где именно находится папка HKEY_LOCAL_MACHINE?

Art F 16.11.2012 20:19

@ArtF: Это место в реестре.

David Schmitt 11.12.2012 16:12

Fusion Log Viewer сделает все это за вас. Перейдите в Пуск -> Программы -> Visual Studio xxxx> Инструменты Visual Studio> Командная строка Visual Studio (запускается от имени администратора) и введите «fuslogvw». В Настройках вы настраиваете ведение журнала.

r3mark 04.06.2013 07:09

Чтобы включить / выключить ведение журнала, я создал файлы .reg, основанные на ответе Гэри Киндела: включение и отключение.

Igor Kustov 19.11.2013 11:16

Включение журнала слияния со временем может серьезно повлиять на производительность. Мой опыт работы с Visual Studio со временем ухудшился, и я обнаружил, что ведение журнала слияния включено. Не забудьте отключить его после использования.

Chandermani 11.07.2014 10:10

При использовании Fusion Log на машине Azure убедитесь, что файлы журнала помещены на тот же диск, что и приложение. Бывший. веб-приложение развернуто на F:\sitesroot\0. Войдите в `F: \ fusionlog`. Создайте этот каталог раньше.

Fosna 16.10.2014 17:11

@ r3mark Он не ставит завершающую косую черту для папки.

James Poulose 31.08.2015 05:25

Но .. ПОМНИТЕ ВЫКЛЮЧИТЬ ЕГО. Я только что потерял день на устранение неполадок медленного IIS, и это из-за того, что я включил Fusion Logging, но не выключил его. Спустя 10 Гб файлов .... Procmon.exe спас положение.

Gumzle 13.10.2015 10:35

«EnableLog = 1» отсутствует в этом списке.

gkakas 13.10.2015 23:31

По моему опыту, вы НЕ должны помещать это в ключ Wow6432Node, даже если ваше приложение работает 32-разрядным.

AJ Richardson 12.04.2017 23:31

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

Tarik 15.06.2017 22:33

Очень полезный. Если вам нужен удобный сценарий PowerShell для установки / удаления этих значений: gist.github.com/guylangston/3e181128672e1d1a15d852a56a5f7164

Guy Langston 04.05.2020 20:15

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

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

Эти кнопки у меня отключены - почему?

Tim Lovell-Smith 25.08.2010 02:11

@ Тим, не видел этого раньше - это может быть связано с правами администратора? В конце концов, модифицируется именно HKEY_LOCAL_MACHINE.

Samuel Jack 24.09.2010 19:35

«Настройки, сбой привязки журнала» было достаточно, чтобы найти мою проблему.

pauloya 16.08.2011 16:00

Убедитесь, что в папке разрешен доступ для записи. UAC и c: \ logs плохо работают с журналом слияния

Edward Wilde 20.02.2013 13:27

В качестве примечания: если кнопки отключены, повторно запустите программу просмотра журнала fusion с правами администратора.

Bruno Lopes 07.03.2013 23:33

Если вы не видите никаких результатов, перезагрузите компьютер. Я испытал это с .NET 4.6 + VS2015 на чистом ПК, просто скопировав папку инструментов .NET 4.6. Обратите внимание, если вам сообщают об ошибках в настраиваемом пути, когда вы его устанавливаете (и вы думаете, что он говорит вам ложь), все равно нажмите OK в диалоговом окне настроек несколько раз, и он проигнорирует ошибку.

GilesDMiddleton 08.09.2015 17:58

Как я писал в комментарии к ответу @MikeGoatly, я думаю, вам нужно убедиться, что вы выбираете правильный файл fuslogvw.exe из правильной папки Windows SDK. Проверьте, какая папка SDK используется, просмотрев .csproj проекта, который вы запускаете.

Veverke 13.06.2017 11:52

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

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

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

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

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

jpierson 04.10.2012 07:34

По крайней мере, в моей ситуации мне на самом деле не нужно было устанавливать собственные пути к журналам. Все, что мне нужно было сделать, это включить вход, например, «Записывать все привязки к диску» в диалоговом окне настроек.

Josh 01.08.2014 00:11

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

vezenkov 12.08.2016 15:32

Я потратил весь день, пытаясь понять, как использовать этот инструмент, и вы его решили!

Spidermain50 15.12.2016 23:27

Если вы пытаетесь использовать Fusion Log Viewer вместе с Visual Studio, я обнаружил, что мне пришлось запустить средство просмотра журнала, а затем перезапустить Visual Studio, поскольку в противном случае средство просмотра, похоже, не регистрирует сбой привязки VS.

The Senator 23.03.2017 19:17

Примечание: создайте папку как Admin!

Tabrock 11.05.2017 00:07

Убедитесь, что вы запускаете fuslogvw не только как администратор, но и из пути правильный Windows SDK, который использует проект Visual Studio, генерирующий исключение. Проверьте его csproj и найдите SDK внутри (мой узел sdk называется TargetFrameworkSDKToolsDirectory). Использование несовпадающей версии fuslogvw, похоже, не улавливает исключения (что имеет смысл ...)

Veverke 12.06.2017 17:28

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

Tristan van Dam 09.11.2017 13:05

Добавление к комментарию @ Veverke: приложение «Искать все» говорит, что последние на моем компьютере находятся в папке «C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.7.1 Tools»; AFAIK с использованием самой последней версии SDK, указанной в списке, является хорошей стратегией (я не думаю, что вам нужно использовать OLDER fuslogvw, даже если вы используете более старую VS.)

ToolmakerSteve 10.04.2018 14:56

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

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

ps УБЕДИТЕСЬ, что вы отключили его после запуска, иначе эта папка может стать довольно большой

Adam Tuliper - MSFT 19.09.2012 04:32

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

magicandre1981 03.04.2015 09:58

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

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

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

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

  4. Направьте свое веб-приложение на использование этого нового пула

человек, вы спасаете мой день, мне потребовалось около 8 часов, чтобы решить проблему. огромное спасибо. :)

Dika Arta Karunia 16.04.2020 06:03

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

Сценарий будет примерно таким:

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

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

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

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

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

magicandre1981 17.09.2015 07:04

Вы можете запустить этот сценарий 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

Спасибо! Я позволил себе поместить ваши команды в это суть. И я добавил создание каталога c:\FusionLog, чтобы люди не забывали об этом ;-)

Oliver 31.10.2015 00:44

Правила командной строки! Я мог быстро воспроизвести это, используя лучшую из изобретенных на сегодняшний день технологий повторного использования кода, называемую «вырезать и вставить». Спасибо.

Remigijus Pankevičius 17.01.2019 12:32

Этот ответ гораздо полезнее, в прошлый раз я вставил его в свои сценарии. Теперь, несколько месяцев спустя, я вернулся сюда и снова увидел нить. Напомни мне, как я его использую в прошлый раз.

cwhsu 12.07.2020 12:14

На всякий случай, если вам интересно, где находится FusionLog.exe - Вы знаете, что это у вас есть, но не можете найти? Я искал FUSLOVW в последние несколько лет снова и снова. После перехода на .NET 4.5 количество версий FUSION LOG резко возросло. Это места, где это можно найти на вашем диске, в зависимости от установленного вами программного обеспечения:

C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v8.0A \ bin \ NETFX 4.0 Tools \ x64

C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v7.0A \ Bin \ x64

C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Tools \ x64

C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v8.0A \ bin \ NETFX 4.0 Tools

C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Инструменты

C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v7.0A \ Bin

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

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

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

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

Так много неправильного с программой просмотра журнала привязки сборки (FUSLOGVW.exe), которую я решил написать альтернативную программу просмотра с именем Fusion ++ и выложите на GitHub. Он использует ту же механику внутри, но анализирует журналы за вас. Вам вообще не нужно заботиться ни о каких настройках, даже о путях журналов ?

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

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

Fusion++

Другие вопросы по теме