如何在.NET中启用程序集绑定失败日志记录(Fusion)?
添加以下值
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\)
确保在文件夹名称后面包含反斜杠并且文件夹存在.
您需要重新启动正在运行的程序以强制它读取这些注册表设置.
顺便说一句,不要忘记在不需要时关闭融合日志.
我通常使用Fusion Log Viewer(来自Visual Studio命令提示符的Fuslogvw.exe或开始菜单中的Fusion Log Viewer) - 我的标准设置是:
以管理员身份打开Fusion Log Viewer
点击设置
选中启用自定义日志路径复选框
输入您希望日志写入的位置,例如,c:\FusionLogs
(重要:确保您已在文件系统中实际创建了此文件夹.)
确保正确级别的日志记录已打开(我有时只选择" 记录所有绑定到磁盘"以确保操作正常)
单击确定
将日志位置选项设置为自定义
一旦完成,请记得关闭注销!
(我刚刚在类似的问题上发布了这个问题 - 我认为这也是相关的.)
如果您的计算机上安装了Windows SDK,您将在Microsoft SDK\Tools下找到"Fusion Log Viewer"(只需在Vista或Windows 7/8的开始菜单中键入"Fusion").启动它,单击"设置"按钮,然后选择"日志绑定失败"或"记录所有绑定".
如果禁用这些按钮,请返回开始菜单,右键单击日志查看器,然后选择"以管理员身份运行".
设置以下注册表值:
[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
然后从Windows资源管理器运行该文件,并忽略有关可能的损坏的警告.
您可以以管理员身份运行此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
注意:确保为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
在融合日志设置查看器换剧本是酒吧没有做到这一点的最好办法.
在ASP.NET中,有时让它正常工作一直很棘手.这个脚本很好用,也列在Scott Hanselman的Power Tool列表中.我个人已经使用了多年,它永远不会让我失望.
您也可以通过启用带有GUID 和关键字(0x4)的DotnetRuntime Private提供程序()来启动通过ETW/xperf的Fusion日志,而不是使用丑陋的日志文件.Microsoft-Windows-DotNETRuntimePrivate
763FD754-7086-4DFE-95EB-C01A46FAF4CA
FusionKeyword
@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
现在,当您在PerfView中打开ETL文件并查看"事件"表时,可以找到Fusion数据:
我编写了一个名为Fusion ++的程序集绑定日志查看器,并将其放在GitHub上。
您可以从此处或通过Chocolatey(choco install fusionplusplus
)获取最新版本。
希望您和这里的一些游客可以节省一些宝贵的时间。