Как включить ведение журнала сбоев привязки сборки (Fusion) в .NET?
@Will - спасибо, что поделились! В качестве бонуса - убедитесь, что вы запускаете fuslogvw.exe от имени администратора, чтобы избежать проблем с правами.
В качестве соответствующего примечания не забудьте выключить регистратор слияния (fuslogvw.exe), когда закончите. В моей папке "C: \ Windows \ ... \ Temporary Internet Files \" было 4 миллиона журналов. Общий размер всех файлов составлял 6 ГиБ, но поскольку они были намного меньше размера кластера, фактическое использованное дисковое пространство составляло 16 ГиБ.
@ Я не согласен с тем, что установка fuslogvw - «лучший» ответ. Если бы вы могли получить только этот инструмент без необходимости устанавливать весь Windows SDK в среде, которая, скорее всего, не является средой разработки, тогда вы были бы правы.
@Will Конечно, но ответ, на который вы ссылаетесь, не охватывает ничего из этого.
@Coxy Это обязательно? Неужели он действительно должен скрывать очевидное? Возможно, вам стоит отредактировать его и включить эту важную информацию. Что касается этого разговора, я должен попрощаться с ним. Доброго вам дня, сэр.
@Will Пожалуйста, не будьте такими ребячливыми. Вы тот, кто пытается собрать репутацию, продвигая ответ, который, хотя и полезен, сообщество сочло менее полезным, чем другие, один из которых намного проще, а другой практически такой же.
@Coxy лучший ответ - использовать ETW для отслеживания его по запросу, а не постоянно: stackoverflow.com/a/29374658/1466046 Здесь вы можете передать файл на другой компьютер и проанализировать его подробно (также событие загрузки изображения + стеки вызовов). Это НАМНОГО глубже по сравнению со старым журналом слияния.
@Coxy, имеющий отполированный логгер Fusion без Windows SDK, возможен: stackoverflow.com/a/56067961/704281





Установите следующее значение реестра:
[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 и проигнорируйте предупреждение о возможном повреждении.
Не то чтобы запись, вероятно, не существовала - вам придется ее создать. По крайней мере, я ответил, когда собирался ответить на этот вопрос прямо перед аварией сегодня утром :)
Что это ! иметь в виду? Ключ или значение? А как насчет 64-битных систем?
это на самом деле не работает. значение ForceLog, а не EnableLog, и здесь требуется дополнительный шаг (см .: thepursuitofalife.com/…)
на самом деле, это действительно работает ... вам просто нужно запустить iisreset afterwords, чтобы заставить его работать.
iisreset? Действительно? Зачем вам сбросить IIS, чтобы заставить работать ведение журнала привязки Fusion?
@Norman: потому что этот конкретный параметр используется для того, чтобы ошибки Asp.Net отображали сообщения об ошибках привязки сборки на страницах ошибок, а не для сохранения журналов в файл. @OP: +1. Отредактировано, чтобы включить файл .reg. ! формат - это тот, который я никогда не видел, за исключением сообщения об ошибке, которое отправило меня на эту страницу в поисках ответов.
Вам не нужно сбрасывать IIS - только соответствующий пул приложений. По крайней мере, это все, что мне нужно было сделать.
что такое формат редактора реестра Windows:?
Ссылка Марки должна идти на docs.microsoft.com/en-us/previous-versions/dotnet/…
Добавьте следующие значения в
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) по-прежнему сообщает мне, что «Ведение журнала привязки сборки отключено». Как заставить работать?
Некоторые сообщают, что изменение реестра не сразу. Вы пробовали включить вход в Fusion, а затем перезагрузиться?
Вам необходимо перезапустить любую запущенную программу, чтобы она могла прочитать эти настройки реестра.
Решения Гэри сработали для меня, хотя мне также пришлось выполнить сброс IIS. Обратите внимание, что я настроил это в чистой среде, где я не хотел устанавливать SDK и тому подобное.
Где именно находится папка HKEY_LOCAL_MACHINE?
@ArtF: Это место в реестре.
Fusion Log Viewer сделает все это за вас. Перейдите в Пуск -> Программы -> Visual Studio xxxx> Инструменты Visual Studio> Командная строка Visual Studio (запускается от имени администратора) и введите «fuslogvw». В Настройках вы настраиваете ведение журнала.
Чтобы включить / выключить ведение журнала, я создал файлы .reg, основанные на ответе Гэри Киндела: включение и отключение.
Включение журнала слияния со временем может серьезно повлиять на производительность. Мой опыт работы с Visual Studio со временем ухудшился, и я обнаружил, что ведение журнала слияния включено. Не забудьте отключить его после использования.
При использовании Fusion Log на машине Azure убедитесь, что файлы журнала помещены на тот же диск, что и приложение. Бывший. веб-приложение развернуто на F:\sitesroot\0. Войдите в `F: \ fusionlog`. Создайте этот каталог раньше.
@ r3mark Он не ставит завершающую косую черту для папки.
Но .. ПОМНИТЕ ВЫКЛЮЧИТЬ ЕГО. Я только что потерял день на устранение неполадок медленного IIS, и это из-за того, что я включил Fusion Logging, но не выключил его. Спустя 10 Гб файлов .... Procmon.exe спас положение.
«EnableLog = 1» отсутствует в этом списке.
По моему опыту, вы НЕ должны помещать это в ключ Wow6432Node, даже если ваше приложение работает 32-разрядным.
Если вы не отключите ведение журнала, через короткий промежуток времени он начнет давать концерты.
Очень полезный. Если вам нужен удобный сценарий PowerShell для установки / удаления этих значений: gist.github.com/guylangston/3e181128672e1d1a15d852a56a5f7164
Если на вашем компьютере установлен Windows SDK, вы найдете «Fusion Log Viewer» в Microsoft SDK \ Tools (просто введите «Fusion» в меню «Пуск» в Vista или Windows 7/8). Запустите его, нажмите кнопку «Настройки» и выберите «Журнал сбоя привязки» или «Журнал всех привязок».
Если эти кнопки отключены, вернитесь в меню «Пуск», щелкните правой кнопкой мыши средство просмотра журнала и выберите «Запуск от имени администратора».
Эти кнопки у меня отключены - почему?
@ Тим, не видел этого раньше - это может быть связано с правами администратора? В конце концов, модифицируется именно HKEY_LOCAL_MACHINE.
«Настройки, сбой привязки журнала» было достаточно, чтобы найти мою проблему.
Убедитесь, что в папке разрешен доступ для записи. UAC и c: \ logs плохо работают с журналом слияния
В качестве примечания: если кнопки отключены, повторно запустите программу просмотра журнала fusion с правами администратора.
Если вы не видите никаких результатов, перезагрузите компьютер. Я испытал это с .NET 4.6 + VS2015 на чистом ПК, просто скопировав папку инструментов .NET 4.6. Обратите внимание, если вам сообщают об ошибках в настраиваемом пути, когда вы его устанавливаете (и вы думаете, что он говорит вам ложь), все равно нажмите OK в диалоговом окне настроек несколько раз, и он проигнорирует ошибку.
Как я писал в комментарии к ответу @MikeGoatly, я думаю, вам нужно убедиться, что вы выбираете правильный файл fuslogvw.exe из правильной папки Windows SDK. Проверьте, какая папка SDK используется, просмотрев .csproj проекта, который вы запускаете.
Обычно я использую Fusion Log Viewer (Fuslogvw.exe из Командная строка Visual Studio или Fusion Log Viewer из меню «Пуск») - моя стандартная настройка:
c:\FusionLogs (Важный: убедитесь, что вы действительно создали эту папку в файловой системе.)Не забудьте выключить выход, когда закончите!
(Я только что опубликовал это по аналогичному вопросу - думаю, здесь это тоже актуально.)
Обратите внимание, что в тех случаях, когда вы самостоятельно размещаете среду выполнения из собственного приложения, вам по какой-то причине потребуется использовать настраиваемый путь к журналу, иначе вы не получите никаких журналов.
По крайней мере, в моей ситуации мне на самом деле не нужно было устанавливать собственные пути к журналам. Все, что мне нужно было сделать, это включить вход, например, «Записывать все привязки к диску» в диалоговом окне настроек.
В моем случае требовался запуск от имени администратора, иначе все параметры были отключены.
Я потратил весь день, пытаясь понять, как использовать этот инструмент, и вы его решили!
Если вы пытаетесь использовать Fusion Log Viewer вместе с Visual Studio, я обнаружил, что мне пришлось запустить средство просмотра журнала, а затем перезапустить Visual Studio, поскольку в противном случае средство просмотра, похоже, не регистрирует сбой привязки VS.
Примечание: создайте папку как Admin!
Убедитесь, что вы запускаете fuslogvw не только как администратор, но и из пути правильный Windows SDK, который использует проект Visual Studio, генерирующий исключение. Проверьте его csproj и найдите SDK внутри (мой узел sdk называется TargetFrameworkSDKToolsDirectory). Использование несовпадающей версии fuslogvw, похоже, не улавливает исключения (что имеет смысл ...)
Благодарим за напоминание о необходимости отключить ведение журнала, как только вы закончите. Я предположил (очень глупо предполагать), что он регистрируется только при запуске журнала слияния
Добавление к комментарию @ Veverke: приложение «Искать все» говорит, что последние на моем компьютере находятся в папке «C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.7.1 Tools»; AFAIK с использованием самой последней версии SDK, указанной в списке, является хорошей стратегией (я не думаю, что вам нужно использовать OLDER fuslogvw, даже если вы используете более старую VS.)
Сценарий смены средства просмотра настроек Fusion Log - лучший способ сделать это.
В ASP.NET иногда было сложно заставить это работать правильно. Этот скрипт отлично работает и также был указан на Список электроинструментов Скотта Хансельмана. Я лично использовал его в течение многих лет, и он никогда меня не подводил.
ps УБЕДИТЕСЬ, что вы отключили его после запуска, иначе эта папка может стать довольно большой
вот почему я использую ETW, чтобы регистрировать данные только в том случае, если они мне действительно нужны, а не постоянно в уродливом большом файле журнала.
Если у вас уже включено ведение журнала, но вы по-прежнему получаете эту ошибку в 64-разрядной версии Windows 7, попробуйте это в IIS 7.5:
Создать новый пул приложений
Перейдите в расширенные настройки этого пула приложений.
Установите Включить 32-битное приложение на Правда
Направьте свое веб-приложение на использование этого нового пула
человек, вы спасаете мой день, мне потребовалось около 8 часов, чтобы решить проблему. огромное спасибо. :)
Немного информации, которая может помочь другим; если вы выполните что-то вроде поиска всех сборок в каком-либо каталоге для классов, которые наследуют / реализуют классы / интерфейсы, убедитесь, что вы очистили устаревшие сборки, если вы получите эту ошибку, относящуюся к одной из ваших собственных сборок.
Сценарий будет примерно таким:
Вкратце: 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:
@YuriBondarchuk, это активирует его по запросу, и у вас есть больше данных в ETL (другие процессы, данные о версиях файлов), так что вы можете передавать файлы другим пользователям, и они могут получить НАМНОГО больше информации по сравнению с обычным журналом слияния
Вы можете запустить этот сценарий 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, чтобы люди не забывали об этом ;-)
Правила командной строки! Я мог быстро воспроизвести это, используя лучшую из изобретенных на сегодняшний день технологий повторного использования кода, называемую «вырезать и вставить». Спасибо.
Этот ответ гораздо полезнее, в прошлый раз я вставил его в свои сценарии. Теперь, несколько месяцев спустя, я вернулся сюда и снова увидел нить. Напомни мне, как я его использую в прошлый раз.
На всякий случай, если вам интересно, где находится 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 logger (fuslogvw.exe), прочтите эту статью: msdn.microsoft.com/en-us/library/e74a18c4(v=VS.100).aspx он сообщает вам, где его скачать, и другую информацию.