Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在.NET中启用程序集绑定失败日志记录(Fusion)_C#_.net_Vb.net_Binding_Assemblies - Fatal编程技术网

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

C# 如何在.NET中启用程序集绑定失败日志记录(Fusion),c#,.net,vb.net,binding,assemblies,C#,.net,Vb.net,Binding,Assemblies,如何在.NET中启用程序集绑定失败日志记录(Fusion)?设置以下注册表值: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion!EnableLog](DWORD)到1 要禁用,请设置为0或删除该值 [编辑]:将以下文本保存到中的文件,例如FusionEnableLog.reg Windows注册表编辑器格式: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Micro

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

设置以下注册表值:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion!EnableLog](DWORD)到1

要禁用,请设置为0或删除该值

[编辑]:将以下文本保存到中的文件,例如FusionEnableLog.reg Windows注册表编辑器格式:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
"EnableLog"=dword:00000001

然后从windows资源管理器运行该文件,忽略有关可能损坏的警告。

将以下值添加到

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\U本地\U机器\SOFTWARE\Microsoft\Fusion 加: DWORD ForceLog将值设置为1 DWORD LogFailures将值设置为1 DWORD LogResourceBinds将设置值绑定为1 DWORD EnableLog将值设置为1 日志文件夹的字符串日志路径设置值(例如C:\FusionLog\) 确保在文件夹名称后包含反斜杠,并且文件夹存在

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

顺便说一句,不要忘记在不需要时关闭fusion日志记录


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


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

我通常使用Fusion日志查看器(从“开始”菜单或Fusion日志查看器)-我的标准设置为:

  • 以管理员身份打开Fusion日志查看器
  • 单击设置
  • 选中启用自定义日志路径复选框
  • 输入要写入日志的位置,例如,
    c:\FusionLogs
    重要提示:确保您已在文件系统中实际创建此文件夹。)
  • 确保启用了正确的日志级别(我有时只需选择“将所有绑定记录到磁盘”,以确保一切正常运行)
  • 单击确定
  • 将日志位置选项设置为自定义
一旦你完成了,记得关闭登录

(我刚刚在一个类似的问题上发表了这篇文章——我认为它在这里也很相关。)

这不是最好的方法


在某些情况下,要让它正常工作有时是很棘手的。这个脚本效果很好,也被列入了。我个人使用它多年了,它从未让我失望。

如果您已经启用了日志功能,但在64位Windows 7上仍然出现此错误,请在IIS 7.5中尝试此操作:

  • 创建新的应用程序池

  • 转到此应用程序池的高级设置

  • 将启用32位应用程序设置为True

  • 指示web应用程序使用此新池


  • 只是一点点可能帮助他人的信息;如果您在某个目录中搜索所有程序集以查找继承/实现类/接口的类,那么如果您发现与您自己的程序集之一有关的此错误,请确保清除过时的程序集

    该场景类似于:

  • 程序集A加载某个文件夹中的所有程序集
  • 此文件夹中的程序集B已过时,但引用了程序集C
  • 程序集C存在,但名称空间、类名或其他一些细节可能在程序集B过时后的时间内发生了更改(在我的示例中,名称空间是通过重构过程更改的)
  • 简言之:A---加载-->B(过时)--引用-->C


    如果发生这种情况,唯一的信号就是错误消息中的名称空间和类名。仔细检查。如果在解决方案中的任何位置都找不到它,则可能试图加载过时的程序集。

    您也可以通过打开DotnetRuntime专用提供程序(
    Microsoft Windows DotNETRuntimePrivate
    )来激活Fusion log via,而不是使用丑陋的日志文件GUID
    763FD754-7086-4DFE-95EB-C01A46FAF4CA
    FusionKeyword
    关键字(0x4)处于启用状态

    现在,在中打开ETL文件并查看事件表时,可以找到融合数据:


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

    以防您想知道FusionLog.exe的位置- 你知道你有,但你找不到?在过去的几年里,我一直在寻找福斯洛夫。在迁移到.NET 4.5之后,FUSION日志的版本数量激增。 Her是可以在磁盘上找到它的位置,具体取决于您安装的软件:

    C:\Program Files(x86)\Microsoft SDK\Windows\v8.0A\bin\NETFX 4.0 Tools\x64

    C:\ProgramFiles(x86)\Microsoft SDK\Windows\v7.0A\Bin\x64

    C:\ProgramFiles(x86)\Microsoft SDK\Windows\v8.1A\bin\NETFX 4.5.1 Tools\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:\someFolder


    正确-c:\someFolder

    对于那些有点懒惰的人,我建议在您想要启用它时将其作为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
    

    使用程序集绑定日志查看器(FUSLOGVW.exe),我决定编写一个名为的替代查看器它在内部使用相同的机制,但为您解析日志。您根本不必关心任何设置,甚至不必关心日志路径,也不必担心条目可能不存在—您必须创建它。至少,当我在今早坠机前准备回答这个问题时,我回答了:)飞机是怎么回事!什么意思?关键或价值
    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