如何启用程序集绑定日志记录?

Posted

技术标签:

【中文标题】如何启用程序集绑定日志记录?【英文标题】:How can I enable Assembly binding logging? 【发布时间】:2013-07-14 22:08:31 【问题描述】:

我收到“无法加载文件或程序集 'Bla' 或其依赖项之一。试图加载格式不正确的程序。”

详细信息的一部分说:

“警告:程序集绑定日志记录已关闭。 要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) 设置为 1。 注意:有一些与程序集绑定失败日志相关的性能损失。 要关闭此功能,请删除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。”

因此,考虑到这可能会让我了解为什么会出现上述错误(也许下一个 YSOD 将包含有关它失败的确切原因的更明确的信息),我导航到注册表中的那个位置,但是有我看不到这样的钥匙。它所拥有的是:

\Fusion 
    (Default)   value not set
    \GACChangeNotification
    \NativeImagesIndex
    \PublisherPolicy

我错过了什么?

【问题讨论】:

How to enable assembly bind failure logging (Fusion) in .NET的可能重复 【参考方案1】:

开始调查任何失败的绑定的一个好地方是使用“fuslogvw.exe”实用程序。这可能会为您提供与绑定失败相关的所需信息,这样您就不必弄乱任何注册表值来打开绑定日志记录。

Fuslogvw MSDN page

该实用程序应位于您的 Microsoft SDKs 文件夹中,具体如下所示,具体取决于您的操作系统: "C:\Program Files (x86)\Microsoft SDKs\Windows\vSDK 版本A\Bin\FUSLOGVW.exe"

    以管理员身份运行此实用程序,从开发人员命令提示符(以管理员身份)键入 FUSLOGVW 会出现一个新屏幕

    转到设置并选择启用所有绑定到磁盘还选择启用自定义日志路径并选择您的文件夹的路径选择存储绑定日志。

    重启 IIS。

    在 FUSLOGVW 窗口中单击 全部删除 以清除任何先前绑定失败的列表

    在您的应用程序中重现绑定失败

    在实用程序中,单击刷新。然后,您应该会在列表中看到记录的绑定失败。

    您可以通过在列表中选择它并单击查看日志

    来查看有关绑定失败的信息

我首先要查找的是应用程序在其中查找程序集的路径。您还应该确保相关程序集的版本号是您所期望的。

【讨论】:

如果设置为只读,请尝试以管理员身份运行该工具 很好的答案,但它没有显示任何绑定失败,即使我启用了所有绑定的日志记录... 如果您正在构建 ASP.NET MVC 应用程序(或可能涉及 IIS 的任何其他应用程序),则需要重新启动 IIS 才能获取绑定日志。 如果您在日志查看器中看不到任何内容,则可以转到设置并选择“启用所有绑定到磁盘”。然后创建一个您可以授予所有权限的文件夹。在您刚刚选择的“日志设置”窗口中,选中“启用自定义日志路径”和您刚刚创建的文件夹的路径。重新启动 IIS 并浏览到您的站点。你现在可以看到日志了。 仅供参考,我必须通过删除临时 Internet 文件来清除 Internet Explorer 缓存。我什至不使用 Internet Explorer。请参阅本页底部的注释msdn.microsoft.com/en-us/library/e74a18c4(v=vs.110).aspx【参考方案2】:

只需在 Fusion 键下创建一个新的 DWORD(32)。将 DWORD 命名为 EnableLog,并将其设置为值 1。然后重新启动 IIS,刷新出现错误的页面,程序集绑定日志将显示在错误消息中。

【讨论】:

如何创建 DWORD(32) ? 使用 regedit,导航到 Fusion 键。右键单击右侧窗格中的空白区域。展开“新建”,您将在此处看到“DWORD(32 位)值”。【参考方案3】:

    创建新的应用程序池

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

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

    让您的 Web 应用程序使用这个新的池

【讨论】:

这不是操作所要求的...这个配置只会强制 Web 应用程序以 x32 运行,即使在 x64 系统上也是如此。在此应用程序中运行的编译为 x64 的 DLL 可能是根本问题,但此设置的影响远不止解决问题。【参考方案4】:

对我来说,“Bla”文件是我的 BIN 文件夹中缺少的 System.Net.http dll。我刚刚添加了它,它工作正常。没有更改任何注册表项或类似的任何内容。

【讨论】:

【参考方案5】:

根据上面 pierce.jason 的回答,我很幸运:

只需在 Fusion 键下创建一个新的 DWORD(32)。将 DWORD 命名为 LogFailures,并将其设置为值 1。然后重新启动 IIS,刷新出现错误的页面,程序集绑定日志将显示在错误消息中。

【讨论】:

【参考方案6】:

如果您有时会运行不同版本的应用程序,请确保在运行的版本不需要时从应用程序 bin 目录中删除“Bla”。

【讨论】:

【参考方案7】:

当我遇到同样的问题时,我通过删除该项目中现有的 key.snk 并添加一个新密钥来修复它。

【讨论】:

【参考方案8】:

不用创建新的应用程序池,你可以去你的 现有应用程序池->右键高级设置->启用32位应用程序-----设置为TRUE

【讨论】:

【参考方案9】:

从客户端调用服务器 dll 时,Windows 应用程序中出现此错误。系统重启后就正常了

【讨论】:

以上是关于如何启用程序集绑定日志记录?的主要内容,如果未能解决你的问题,请参考以下文章

如何仅为应用程序控制器启用日志记录调试级别?

如何在代码中启用/禁用 spdlog 日志记录?

如何在 Android 上启用/禁用蓝牙硬件初始化日志记录?

如何启用 Hystrix DEBUG 级别的日志记录

“/”应用程序中的服务器错误。 未能加载文件或程序集“HuaCheng”或它的某一个依赖项。试图加载格式不正确的程序。

如何使用 Apache HttpClient 5 启用线路日志记录