我如何在.NET中启用程序集绑定失败日志记录(融合)?
当前回答
设置以下注册表值:
(微软HKEY_LOCAL_MACHINE \ SOFTWARE \ \融合!EnableLog] (DWORD)到1
若要禁用,请设置为0或删除该值。
[edit]:将以下文本保存为文件,如“FusionEnableLog”。注册, Windows注册表编辑器格式:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
"EnableLog"=dword:00000001
然后从windows资源管理器运行该文件,并忽略有关可能损坏的警告。
其他回答
对于那些有点懒的人,我建议当你想要启用它时,把它作为一个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
这不是回答,而是警告:
如果你曾经启用这个日志记录,不要忘记禁用它,否则你以后会后悔的。
我确实忘记了,我最终得到了几个GB的小日志文件,HTM扩展在C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\INetCache\IE文件夹中-它显然记录了NT AUTHORITY\SYSTEM帐户下运行的应用程序的所有程序集绑定。
文件数量超过300万,Total Commander和Windows资源管理器都不能显示内容或文件夹大小而不挂起。
在禁用日志记录并重新启动之后,我从命令提示符中运行了删除。
删除三星970 Pro SSD上的所有文件花了超过15分钟,它一直显示100%的磁盘使用率-我的高端PC工作站被这个删除操作弄得瘫痪,直到它完成才有部分响应。
设置以下注册表值:
(微软HKEY_LOCAL_MACHINE \ SOFTWARE \ \融合!EnableLog] (DWORD)到1
若要禁用,请设置为0或删除该值。
[edit]:将以下文本保存为文件,如“FusionEnableLog”。注册, Windows注册表编辑器格式:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
"EnableLog"=dword:00000001
然后从windows资源管理器运行该文件,并忽略有关可能损坏的警告。
您也可以通过ETW/xperf通过GUID 763FD754-7086-4DFE-95EB-C01A46FAF4CA和FusionKeyword关键字(0x4)打开dotnetruntimeprivate提供者(Microsoft-Windows-DotNETRuntimePrivate)来激活Fusion日志。
@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日志查看器(从Visual Studio命令提示符或从开始菜单中的Fusion日志查看器中的Fuslogvw.exe) -我的标准设置是:
以管理员身份打开Fusion Log Viewer 点击设置 选中“启用自定义日志路径”复选框 输入要写入日志的位置,例如c:\FusionLogs(注意:请确保您已经在文件系统中创建了此文件夹)。 确保打开了正确的日志级别(我有时只是选择“日志全部绑定到磁盘”,只是为了确保事情正常工作) 单击OK 将日志位置选项设置为自定义
一旦你完成了,记得关闭登录!
(我刚刚就一个类似的问题发表了这篇文章——我认为这也与此相关。)