如何在. NET中启用程序集绑定故障日志记录(Fusion)?
设置以下注册表值:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion! EnableLog](DWORD)到1
要禁用,请设置为0或删除该值。
[编辑]:将以下文本保存到文件中,例如FusionEnableLog.regWindows注册表编辑器格式:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]"EnableLog"=dword:00000001
然后从windows资源管理器运行该文件并忽略有关可能损坏的警告。
将以下值添加到
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FusionAdd:DWORD ForceLog set value to 1DWORD LogFailures set value to 1DWORD LogResourceBinds set value to 1DWORD EnableLog set value to 1String LogPath set value to folder for logs (e.g. C:\FusionLog\)
确保您在文件夹名称之后包括反斜杠并且文件夹已存在。
您需要重新启动正在运行的程序以强制它读取这些注册表设置。
顺便说一句,不要忘记在不需要的时候关闭聚变测井。
如果您的机器上安装了Windows SDK,您将在Microsoft SDK\Tools下找到“Fusion Log Viewer”(只需在Vista或Windows 7/8的开始菜单中键入“Fusion”)。启动它,单击设置按钮,然后选择“日志绑定失败”或“记录所有绑定”。
如果禁用这些按钮,请返回开始菜单,右键单击日志查看器,然后选择“以管理员身份运行”。
我通常使用Fusion Log Viewer(Visual Studio命令提示符中的Fuslogvw.exe或开始菜单中的Fusion Log Viewer)-我的标准设置是:
c:\FusionLogs
记住,一旦你完成登录关闭!
(我刚刚发布了一个类似的问题-我认为这在这里也很重要。
融合日志设置查看器更改脚本是酒吧没有最好的方法来做到这一点。
在ASP.NET中,有时很难让它正确工作。这个脚本很棒,也被列在Scott Hanselman的Power Tool列表上。我个人使用它很多年了,它从来没有让我失望过。
如果您已经启用了日志记录,并且在Windows 7 64位上仍然会出现此错误,请在IIS 7.5中尝试此操作:
创建新的应用程序池
转到此应用程序池的高级设置
将启用32位应用程序设置为True
指向您的Web应用程序以使用此新池
只是一点点可能对其他人有帮助的信息;如果您按照在某个目录中搜索继承/实现类/接口的类的所有程序集的方式执行某些操作,那么如果您收到与您自己的程序集之一有关的此错误,请确保清除陈旧的程序集。
场景大概是这样的:
简而言之:A---load-->B(stale)---引用--->C
如果发生这种情况,唯一的标志是错误消息中的命名空间和类名。仔细检查它。如果您在解决方案中的任何地方都找不到它,您可能会尝试加载陈旧的程序集。
您还可以通过ETW/xperf激活Fusion日志,而不是使用丑陋的日志文件,方法是使用GUID763FD754-7086-4DFE-95EB-C01A46FAF4CA和FusionKeyword关键字(0x4)打开DotnetRuntime私有提供程序(Microsoft-Windows-DotNETRuntimePrivate)。
763FD754-7086-4DFE-95EB-C01A46FAF4CA
FusionKeyword
Microsoft-Windows-DotNETRuntimePrivate
@echo offecho Press a key when ready to start...pauseecho .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...pausepauseecho .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 -compressdel kernel.etldel clr.etldel clr_DCend.etl
当您现在打开完美视图中的ETL文件并查看Events表时,您可以找到Fusion数据:
您可以以管理员身份运行此Powershell脚本以启用FL:
Set-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name ForceLog -Value 1 -Type DWordSet-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogFailures -Value 1 -Type DWordSet-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogResourceBinds -Value 1 -Type DWordSet-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogPath -Value 'C:\FusionLog\' -Type Stringmkdir C:\FusionLog -Force
而这个要禁用:
Remove-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name ForceLogRemove-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogFailuresRemove-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogResourceBindsRemove-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogPath
如果你想知道FusionLog.exe的位置-你知道你有它,但你找不到它?我在过去的几年里一遍又一遍地寻找FUSLOVW。移动到. NET 4.5版本的FUSION日志数量爆炸。她是可以在磁盘上找到的地方,具体取决于您安装的软件:
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:\程序文件(x86)\Microsoft SDK\Windows\v8.1A\bin\NETFX 4.5.1工具\x64
C:\Program Files(x86)\Microsoft SDK\Windows\v8.0A\bin\NETFX 4.0工具
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:\一些文件夹
正确-c:\一些文件夹
对于那些有点懒的人,我建议您在想要启用它时将其作为bat文件运行:
reg add "HKLM\Software\Microsoft\Fusion" /v EnableLog /t REG_DWORD /d 1 /freg add "HKLM\Software\Microsoft\Fusion" /v ForceLog /t REG_DWORD /d 1 /freg add "HKLM\Software\Microsoft\Fusion" /v LogFailures /t REG_DWORD /d 1 /freg add "HKLM\Software\Microsoft\Fusion" /v LogResourceBinds /t REG_DWORD /d 1 /freg 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上.它内部使用相同的机制的替代查看器,但为您解析日志。您根本不必关心任何设置,甚至日志路径也不需要😉
您可以从这里或通过Chocolatey(choco install fusionplusplus)获得最新版本。
choco install fusionplusplus
我希望你和这里的一些游客可以用它节省一些有价值的终身分钟。
这不是一个答案,而是一句警告:
我确实忘记了,我最终在C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\INetCache\IE文件夹中获得了几个GB的具有HTM扩展名的小日志文件-它显然记录了在NT AUTHORITY\SYSTEM帐户下运行的应用程序的所有程序集绑定。
C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\INetCache\IE
HTM
NT AUTHORITY\SYSTEM
文件数大于300万,并且总指挥官和Windows资源管理器都无法在不挂起的情况下显示内容或文件夹大小。
在禁用日志记录并重新启动以进行良好测量后,我从命令提示符中运行删除。
删除三星970 Pro SSD上的所有文件花了超过15分钟,该SSD一直显示100%的磁盘使用率-我的高端PC工作站被此删除操作降低到膝盖,并且在完成之前仅保持部分响应。