当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在.NET中启用程序集绑定失败日志记录(Fusion)》经验,为你挑选了8个好方法。

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



1> Gary Kindel..:

添加以下值

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

2> Mike Goatly..:

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

以管理员身份打开Fusion Log Viewer

点击设置

选中启用自定义日志路径复选框

输入您希望日志写入的位置,例如,c:\FusionLogs(重要:确保您已在文件系统中实际创建了此文件夹.)

确保正确级别的日志记录已打开(我有时只选择" 记录所有绑定到磁盘"以确保操作正常)

单击确定

将日志位置选项设置为自定义

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

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


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

3> Samuel Jack..:

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

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


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

4> user32736..:

设置以下注册表值:

[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资源管理器运行该文件,并忽略有关可能的损坏的警告.


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

5> Tereza Tomco..:

您可以以管理员身份运行此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


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

6> Adam Tuliper..:

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

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



7> magicandre19..:

您也可以通过启用带有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

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

PerfView中的融合事件



8> Waescher..:

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

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

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

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有