Fusion是个很有用的工具,可以用来调试公共语言运行时加载程序集失败的问题。比起尝试使用Visual Studio调试器调试应用程序,更好的办法是打开Fusion日志开关然后查看记录到的日志结果。
要启用Fusion日志,你需要编辑Windows注册表。下面是具体的注册表位置信息(如果注册表中没有这些值,需要手动添加)。
HKLM\Software\Microsoft\Fusion\ForceLog 1 HKLM\Software\Microsoft\Fusion\LogPath C:\FusionLogs
其中ForceLog值是DWORD类型,而LogPath是个字符串。你可以将LogPath设置为任何你选择的位置。代码清单2-12是个绑定程序集失败的例子。
代码清单1 一个尝试绑定程序集失败的Fusion日志示例
*** Assembly Binder Log Entry (6/21/2013 @ 1:50:14 PM) *** The operation failed. Bind result: hr = 0x80070002. The system cannot find the file specified. Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll Running under executable C:\Program Files\1UPIndustries\Bins\v1.1.0.242\Bins.exe --- A detailed error log follows. === Pre-bind state information === LOG: User = DEV\gmclean LOG: DisplayName = TaskbarDockUI.Xtensions.Bins.resources, Version=1.0.0.0, Culture=en-US, PublicKeyToken=null (Fully-specified) LOG: Appbase = file:///C:/Program Files/1UPIndustries/Bins/v1.1.0.242/ LOG: Initial PrivatePath = NULL LOG: Dynamic Base = NULL LOG: Cache Base = NULL LOG: AppName = Bins.exe Calling assembly : TaskbarDockUI.Xtensions.Bins, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null. === LOG: This bind starts in default load context. LOG: No application configuration file found. LOG: Using host configuration file: LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config. LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind). LOG: Attempting download of new URL file:///C:/Program Files/1UPIndustries/Bins/v1.1.0.242/en-US/TaskbarDockUI.Xtensions.Bins.resources.DLL. LOG: Attempting download of new URL file:///C:/Program Files/1UPIndustries/Bins/v1.1.0.242/en-US/TaskbarDockUI.Xtensions.Bins.resources/ TaskbarDockUI.Xtensions.Bins.resources.DLL. LOG: Attempting download of new URL file:///C:/Program Files/1UPIndustries/Bins/v1.1.0.242/en-US/TaskbarDockUI.Xtensions.Bins.resources.EXE. LOG: Attempting download of new URL file:///C:/Program Files/1UPIndustries/Bins/v1.1.0.242/en-US/TaskbarDockUI.Xtensions.Bins.resources/TaskbarDockUI.Xtensions.Bins.resources.EXE. LOG: All probing URLs attempted and failed.
编辑完注册表后,任何托管应用程序的所有解析程序集的尝试(无论成功与否)都会被记录到相应的Fusion日志文件中。显然Fusion下会有大量有用的日志文件产生,但是在大量日志文件中查找问题就像大海捞针一样困难。
幸运的是, Fusion还有个用户界面应用程序,可以帮助开发人员更容易找到自己程序的日志文件,而不用直接在众多的日志文件中苦苦寻找。图1展示了Fusion的用户界面。
图1 Fusion的用户界面可以迅速找到特定程序的日志文件
不是所有的依赖都需要直接引用程序集。一种方式就是将服务代码部署为宿主服务。这种做法需要进程或网络间的数据通讯能力的支持,但是它能最小化客户端和服务之间必需的程序集引用。
时间: 2024-10-11 15:32:20