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


当前回答

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

这个要禁用:

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

其他回答

只是一点点可能会帮助别人的信息;如果您在某个目录中搜索继承/实现类/接口的类的所有程序集,那么如果您得到与您自己的某个程序集相关的此错误,请确保您清除了过时的程序集。

场景是这样的:

程序集A装入某个文件夹中的所有程序集 此文件夹中的程序集B已过期,但引用程序集C 程序集C存在,但是名称空间、类名或其他一些细节可能在程序集B失效后发生了变化(在我的例子中,名称空间是通过重构过程改变的)。

简而言之:——加载> B(过期)——引用——> C

如果发生这种情况,唯一的迹象是错误消息中的名称空间和类名。仔细检查。如果您在解决方案中到处都找不到它,那么您可能正在尝试加载一个陈旧的程序集。

将下列值添加到

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

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

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

顺便说一下,不要忘记在不需要的时候关闭融合日志记录。

设置以下注册表值:

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

在我的例子中,帮助键入小写的磁盘名称

错误- C:\someFolder

正确- c:\someFolder

融合日志设置查看器更改脚本是做到这一点的最好方法。

在ASP。NET中,有时要使它正确工作是很棘手的。这个脚本工作得很好,也被列入了Scott Hanselman的Power Tool列表。我个人已经使用它很多年了,它从来没有让我失望过。