如何调试通过 Assembly.Load(byte[]) 加载的程序集?

2024-02-11

我正在为使用加载插件 DLL 的产品创建一个插件Assembly.Load(byte[])。这一切都很好,但这意味着我没有传统的方法来加载调试符号来单步调试我的代码。

疯狂的是,几个月前我遇到了完全相同的问题并解决了它 - 天哪,我为自己感到骄傲!所以我知道这是可以做到的,我只是忘记了如何做到!

我对我可能尝试过的事情有一些模糊的记忆,但我无法从脑海中梳理出细节:

  • .NET Reflector
    • 但可能是错误的,因为我清楚地记得单步执行原始 .cs 文件
  • Using IIS Express rather than Cassini
    • 但这让我觉得这是一个奇怪的解决方案 - 程序集是从字节数组加载的,因此框架对 DLL 的来源一无所知,也不知道如果它看到一个适当的 PDB 可能是什么样子。这个问题在任何环境下都应该存在。
  • Loading the symbols manually through the "Modules" window
    • 尝试过这个;我得到“符号文件 xxxxx.pdb 与模块不匹配”——因为,当然,我们是从字节数组加载,而不是 DLL 本身。

如果您的程序集具有强名称,则可以将该程序集放入 GAC 中。强命名的程序集是always从 GAC 加载,即使它是通过Assembly.Load(byte[])。然后只需将您的符号放入C:\Windows\symbols\dll或者任何方便的地方。我一直这样做是为了调试我们自己产品的插件 DLL,这些插件由另一个应用程序以类似的方式加载。

您可以使用gacutil将其安装到 GAC 中。请记住在完成调试后将其删除,否则您可能最终会针对 GAC 已忘记的旧版本运行测试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何调试通过 Assembly.Load(byte[]) 加载的程序集? 的相关文章

随机推荐