Debug .NET assembly binding aka Find what dll is used and why

流过昼夜 提交于 2020-01-11 03:42:04

问题


We're having some mystery version mismatches on our referenced dll's loaded at runtime.

Errors like:

Could not load file or assembly X or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Is there any way to debug the assembly binding.

In other words, how can I know the following details about loaded assemblies:

  • Version
  • Location
  • Who/What caused the loading (my code, another .dll, ...)
  • Well, just about everything else there is to know...

回答1:


The Assembly Binding Log Viewer (aka Fusion Log Viewer, fuslogvw.exe) shows useful data for these sorts of issues such as:

  • What process is trying to load an assembly
  • The full name of the assembly (version, culture, public key token)
  • The assembly that's causing the load
  • Which paths were probed for the assembly

You can log all binds or just bind failures.

fuslogvw.exe should be accessible directly from any VS command prompt.




回答2:


Totally agree with Chris, Assembly Binding Log Viewer should give you all information you need. In addition you could also use WinDbg + SOS.dll. Mostly it's used for debugging but can be quite useful in some other cases when you need to know as much information as possible. The only problem that could stop you is that it doesn't have nice UI like VS debugger :)

Good luck!



来源:https://stackoverflow.com/questions/4679279/debug-net-assembly-binding-aka-find-what-dll-is-used-and-why

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!