6

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

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

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

  • .NET 反射器
    • 可能是错误的,因为我清楚地记得单步执行原始 .cs 文件
  • 使用 IIS Express 而不是 Cassini
    • 但这让我觉得这是一个奇怪的解决方案——程序集是从字节数组加载的,因此框架对 DLL 的来源或适当的 PDB 可能会是什么样子一无所知。这个问题应该存在于任何环境中。
  • 通过“模块”窗口手动加载符号
    • 试过这个;我得到“符号文件 xxxxx.pdb 与模块不匹配”——因为,当然,我们是从字节数组加载的,而不是 DLL 本身。
4

1 回答 1

1

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

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

于 2012-10-22T07:09:09.393 回答