程序集绑定日志查看器显示有关失败的程序集绑定的详细信息。这些信息有助于您诊断 .NET Framework 无法在运行时找到程序集的原因。这些失败通常是由于程序集部署到错误位置或者版本号或区域性不匹配造成的。如果公共语言运行库未能找到程序集,则通常会在您的应用程序中表现为 TypeLoadException。
使用程序集绑定日志查看器
使用程序集绑定日志查看器可以执行以下操作:
您可以设置注册表项,以便在查看器中显示附加信息:
- 从命令行运行 Fuslogvw.exe。
以下屏幕快照显示了程序集绑定日志查看器。
程序集绑定日志内容
查看器将为每次失败的程序集绑定显示一项。对于每次失败,查看器会描述启动该绑定的应用程序,绑定所针对的程序集(包括名称、版本、区域性和公钥),以及失败的日期和时间。
- 选择“Default”选项按钮可查看除 ASP.NET 之外的所有应用程序类型的绑定失败。默认情况下,日志项存储在磁盘上 wininet 缓存的各用户目录中。
- 选择“ASP.NET”选项按钮可以查看 ASP.NET 应用程序的绑定失败。基于用户存储日志项对于 ASP.NET 而言是不适合的,因为在 Web 服务器方案中通常所有用户都以相同的用户 ID 运行。因此,ASP.NET 在各应用程序缓存目录中记录其绑定失败。
- 选择“Custom”选项按钮可以在您指定的自定义目录中查看绑定失败信息。您必须指定希望运行库存储这些日志的自定义位置,方法是将注册表项 HKLM/Software/Microsoft/Fusion/LogPath 设置为有效的目录名称。此目录应是干净的,并且仅包含运行库所生成的文件。如果该目录中包含了一个会生成可被记录下来的失败的可执行文件,则该失败将不会被记录下来,因为此工具试图创建一个与该可执行文件同名的目录。此外,试图从日志位置运行可执行文件时也会失败。
注意 默认的绑定位置优于自定义绑定位置。运行库将默认绑定位置存储在 wininet 缓存中,因而可以自动清除该位置。如果您指定了自定义绑定位置,则需要自行将其清除。
- 在查看器中选择所需项的应用程序名称。
- 单击“View Log”按钮。或者,可以双击所选项。
该工具将显示以下有关所选绑定失败的详细信息:
- 绑定失败的具体原因,例如“未找到文件”或“版本不匹配”。
- 与启动该绑定的应用程序有关的信息,包括其名称、应用程序的根目录 (AppBase) 以及专用搜索路径的说明(如果具有此类路径)。
- 该工具正查找的程序集的标识。
- 已经应用的任何应用程序、发行者或管理员版本策略的说明。
- 是否已在全局程序集缓存中找到了程序集。
- 所有正探测的 URL 的列表。
以下日志项的示例展示与失败的程序集绑定有关的详细信息。
*** Assembly Binder Log Entry (3/5/2002 @ 12:54:20 PM) *** The operation failed. Bind result: hr = 0x80070002. The system cannot find the file specified. Assembly manager loaded from: C:/WINNT/Microsoft.NET/Framework/v1.0.3705/fusion.dll Running under executable C:/Program Files/Microsoft.NET/FrameworkSDK/Samples/Tutorials/resourcesandlocalization/graphic/cs/graphicfailtest.exe --- A detailed error log follows. === Pre-bind state information === LOG: DisplayName = graphicfailtest.resources, Version=0.0.0.0, Culture=en-US, PublicKeyToken=null (Fully-specified) LOG: Appbase = C:/Program Files/Microsoft.NET/FrameworkSDK/Samples/Tutorials/resourcesandlocalization/graphic/cs/ LOG: Initial PrivatePath = NULL LOG: Dynamic Base = NULL LOG: Cache Base = NULL LOG: AppName = NULL Calling assembly : graphicfailtest, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null. === LOG: Processing DEVPATH. LOG: DEVPATH is not set. Falling through to regular bind. LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind). LOG: Post-policy reference: graphicfailtest.resources, Version=0.0.0.0, Culture=en-US, PublicKeyToken=null LOG: Attempting download of new URL file:///C:/Program Files/Microsoft.NET/FrameworkSDK/Samples/Tutorials/resourcesandlocalization/graphic/cs/en-US/graphicfailtest.resources.DLL. LOG: Attempting download of new URL file:///C:/Program Files/Microsoft.NET/FrameworkSDK/Samples/Tutorials/resourcesandlocalization/graphic/cs/en-US/graphicfailtest.resources/graphicfailtest.resources.DLL. LOG: Attempting download of new URL file:///C:/Program Files/Microsoft.NET/FrameworkSDK/Samples/Tutorials/resourcesandlocalization/graphic/cs/en-US/graphicfailtest.resources.EXE. LOG: Attempting download of new URL file:///C:/Program Files/Microsoft.NET/FrameworkSDK/Samples/Tutorials/resourcesandlocalization/graphic/cs/en-US/graphicfailtest.resources/graphicfailtest.resources.EXE. LOG: All probing URLs attempted and failed.
- 在查看器中选择一项。
- 单击“Delete Entry”按钮。
- 单击“Delete All”按钮。
- 单击“Refresh”按钮。查看器在其运行时不自动检测新的日志项。您必须使用“Refresh”按钮来显示它们。
- 单击“Exit”按钮。
其他配置设置
- 将 HKLM/Software/Microsoft/Fusion/ForceLog 注册表值设置为 1(该值是 DWORD)。
默认情况下,Fuslogvw.exe 只记录失败了的定位程序集的尝试。您可能会遇到需要查看所有成功的程序集绑定的情况。例如,您可能要验证程序集正从您的应用程序目录加载,而不是从全局程序集缓存加载。设置此注册表项以强制 Fuslogvw.exe 记录所有程序集绑定。
- 将 HKLM/Software/Microsoft/Fusion/LogResourceBinds 注册表值设置为 1(该值为 DWORD)。
默认情况下,Fuslogvw.exe 不记录失败了的定位附属程序集的尝试。设置此注册表项将启用该功能。
请参见
.NET Framework 工具 | 全局程序集缓存 | 运行库如何定位程序集 | TypeLoadException 类