相当于.net / mono应用程序的ldd

本文关键字:ldd 应用程序 mono net 相当于 | 更新日期: 2023-09-27 18:18:42

我目前在MonoDevelop和Mono运行时遇到了一些麻烦。具体地说,当我在MonoDevelop中运行用NUnit创建的单元测试时,我得到了一个"Unix传输错误"。我在某个地方读到,它是由windows版本的DLL引起的,我想检查NUnit库"链接"的库。

所以我在寻找一个等价的ldd,而不必自己写它…

我没有发现类似的东西,是有什么吗?

相当于.net / mono应用程序的ldd

如果您打开MONO_LOG_LEVEL,您可以看到Mono在运行时尝试解析程序集依赖项。这将遍历全局程序集缓存和本地目录,这可能有助于您更好地了解应用程序所需的特定.dll。

示例(显示无法解析的.dll):

$ MONO_LOG_LEVEL=debug mono Clojure.Main.exe
...
Mono: Assembly Loader probing location: '/usr/lib/mono/gac/Clojure/1.5.0.0__cf3caecd327a2fa9/Clojure.dll'.
Mono: Assembly Loader probing location: '/usr/lib/Clojure.dll'.
Mono: Assembly Loader probing location: '/usr/lib/mono/4.5/Facades/Clojure.dll'.
Mono: Assembly Loader probing location: '/usr/lib/mono/gac/Clojure/1.5.0.0__cf3caecd327a2fa9/Clojure.exe'.
Mono: Assembly Loader probing location: '/usr/lib/Clojure.exe'.
Mono: Assembly Loader probing location: '/usr/lib/mono/4.5/Facades/Clojure.exe'.
Mono: The following assembly referenced from /home/bonh/foo/Clojure.1.5.0.2/tools/net40/Clojure.Main.exe could not be loaded:
 Assembly:   Clojure    (assemblyref_index=1)
 Version:    1.5.0.0
 Public Key: cf3caecd327a2fa9
etc.

关于这个主题的有用信息可以在Scott Hanselman的博客文章中找到:回到基础:使用Fusion日志查看器调试模糊的加载器错误:

当涉及到程序集时,有三个"times"要知道:

  • 在它发生之前绑定-你想要什么?
    ILDASM或Reflector将告诉您程序集需要什么(它被编译了什么)反对)
  • 当它发生时绑定-它看起来在哪里?
    Fusion(程序集绑定日志查看器)将显示所有程序集绑定设置HKLM'Software'Microsoft'Fusion'ForceLog注册表值为1
  • 绑定后发生-你得到了什么?
    进程资源管理器将告诉您在内存中加载了哪个DLL(程序集)以及从何处加载它来了。

我相信进程资源管理器也应该与Mono运行时一起工作,并且应该向您显示MonoDevelop运行实例使用的库。

BTW我看到unix传输错误时,测试代码称为非托管库,导致段错误(内存损坏),所以请记住,你的问题可能不是由NUnit本身引起的。