如何在.NET中启用程序集绑定失败日志记录(Fusion)

use*_*736 790 .net c# vb.net binding assemblies

如何在.NET中启用程序集绑定失败日志记录(Fusion)?

Gar*_*del 835

添加以下值

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

确保在文件夹名称后面包含反斜杠并且文件夹存在.

您需要重新启动正在运行的程序以强制它读取这些注册表设置.

顺便说一句,不要忘记在不需要时关闭融合日志.

  • 您需要重新启动正在运行的程序才能读取这些注册表设置 (54认同)
  • Fusion Log Viewer为您完成所有这些工作.转到开始 - >程序 - > Visual Studio xxxx> Visual Studio工具> Visual Studio命令提示符(以管理员身份运行),然后键入"fuslogvw".在"设置"中,调整日志记录. (48认同)
  • 加里的解决方案对我有用,虽然我也不得不关注重置IIS.注意我在干净的环境中配置了这个,我不想安装SDK等. (23认同)
  • 为了方便地打开/关闭日志,我创建了.reg文件,这些文件基于Gary Kindel的答案:[启用](http://pastebin.com/PmKQ0hgn)和[禁用](http://pastebin.com/NBivNkcu). (10认同)
  • 据一些人报道,注册表更改不会马上进行.您是否尝试过启用Fusion登录然后重新启动? (5认同)
  • 但是......记得把它关掉.我只是失去了一天的慢速IIS故障排除,这是由于我打开Fusion Logging而不是关闭它.以后10 Gb的文件.... Procmon.exe保存了一天. (4认同)
  • 启用融合日志会随着时间的推移产生严重的性能影响.我的Visual Studio体验随着时间的推移而恶化,但却发现融合日志记录已启用.记得在使用后禁用它. (2认同)
  • 在Azure计算机上使用Fusion Log时,请确保将日志文件与应用程序放在同一磁盘上.防爆.Web应用程序部署到`F:\ sitesroot\0`.登录到F:\ fusionlog \`.之前创建该目录. (2认同)

Mik*_*tly 263

我通常使用Fusion Log Viewer(来自Visual Studio命令提示符的Fuslogvw.exe或开始菜单中的Fusion Log Viewer) - 我的标准设置是:

  • 以管理员身份打开Fusion Log Viewer
  • 点击设置
  • 选中启用自定义日志路径复选框
  • 输入您希望日志写入的位置,例如,c:\FusionLogs(重要:确保您已在文件系统中实际创建了此文件夹.)
  • 确保正确级别的日志记录已打开(我有时只选择" 记录所有绑定到磁盘"以确保操作正常)
  • 单击确定
  • 将日志位置选项设置为自定义

一旦完成,请记得关闭注销!

(我刚刚在类似的问题上发布了这个问题 - 我认为这也是相关的.)

  • 在我的情况下需要以管理员身份运行,否则所有选项都被禁用. (39认同)
  • 确保你运行`fuslogvw`不仅是作为管理员,而且还从**正确的**Windows SDK路径运行引发异常的Visual Studio项目正在使用.检查它的csproj并在其中搜索SDK(我的sdk节点名为`TargetFrameworkSDKToolsDirectory`).使用不匹配的fuslogvw版本似乎没有捕获异常(这是有道理的......) (6认同)
  • 请注意,如果您自己从本机应用程序托管运行时,由于某种原因,您将需要使用自定义日志路径,否则您将无法记录任何内容. (4认同)
  • 注意:创建文件夹为Admin! (2认同)

Sam*_*ack 189

如果您的计算机上安装了Windows SDK,您将在Microsoft SDK\Tools下找到"Fusion Log Viewer"(只需在Vista或Windows 7/8的开始菜单中键入"Fusion").启动它,单击"设置"按钮,然后选择"日志绑定失败"或"记录所有绑定".

如果禁用这些按钮,请返回开始菜单,右键单击日志查看器,然后选择"以管理员身份运行".

  • @Tim,之前没见过 - 可能与Admin权限有关吗?毕竟是HKEY_LOCAL_MACHINE正在被修改. (14认同)
  • 这些按钮对我来说是禁用的 - 为什么? (6认同)
  • 就像注意一样,如果按钮被禁用,请使用管理员权限重新运行Fusion日志查看器. (4认同)
  • "设置,日志绑定失败"足以找到我的问题. (2认同)

use*_*736 84

设置以下注册表值:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion!EnableLog](DWORD)为1

要禁用,请设置为0或删除该值.

[编辑]:将以下文本保存到Windows注册表编辑器格式的文件中,例如FusionEnableLog.reg:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
"EnableLog"=dword:00000001
Run Code Online (Sandbox Code Playgroud)

然后从Windows资源管理器运行该文件,并忽略有关可能的损坏的警告.

  • 实际上,这确实有效......你只需要运行iisreset后来使其工作. (48认同)
  • @Norman:因为此特定设置用于使Asp.Net错误在错误页面中显示程序集绑定错误消息,而不是将日志保存到文件.@OP:+1.编辑包含.reg文件.的!格式是我从未见过的格式,除了发送给我在此页面寻找答案的错误消息. (4认同)
  • 什么了!意思?关键或价值?那么64位系统呢? (3认同)
  • 并不是说条目可能不存在 - 你必须创建它.至少,我在今天早上崩溃前即将回答这个问题时做了:) (2认同)
  • 这实际上不起作用。该值是ForceLog而不是EnableLog,这里需要一个额外的步骤(参见:http://thepursuitofalife.com/getting- assembly-bind-failure-logging-to-work/) (2认同)
  • 您不需要重置IIS - 只需要重置相关的应用程序池.或者至少那是我需要做的. (2认同)

Ter*_*ova 73

您可以以管理员身份运行此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
Run Code Online (Sandbox Code Playgroud)

注意:确保为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
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!我允许自己把命令放到[这个要点](https://gist.github.com/teamaton/3093a8ee66433a278fd5).我添加了`c:\ FusionLog`目录的创建,以便人们不要忘记;-) (4认同)

Ada*_*SFT 20

融合日志设置查看器换剧本是酒吧没有做到这一点的最好办法.

ASP.NET中,有时让它正常工作一直很棘手.这个脚本很好用,也列在Scott Hanselman的Power Tool列表中.我个人已经使用了多年,它永远不会让我失望.


mag*_*981 13

您也可以通过启用带有GUID 和关键字(0x4)的DotnetRuntime Private提供程序()来启动通过ETW/xperf的Fusion日志,而不是使用丑陋的日志文件.Microsoft-Windows-DotNETRuntimePrivate763FD754-7086-4DFE-95EB-C01A46FAF4CAFusionKeyword

@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
Run Code Online (Sandbox Code Playgroud)

现在,当您在PerfView中打开ETL文件并查看"事件"表时,可以找到Fusion数据:

PerfView中的融合事件


Wae*_*her 7

我编写了一个名为Fusion ++的程序集绑定日志查看器,并将其放在GitHub上

您可以从此处或通过Chocolatey(choco install fusionplusplus)获取最新版本。

希望您和这里的一些游客可以节省一些宝贵的时间。

融合++


Igo*_*ros 5

对于那些有点懒惰的人,我建议将其作为 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
Run Code Online (Sandbox Code Playgroud)