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

时间:2012-10-22 03:18:45

标签: c# .net visual-studio visual-studio-2008

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

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

我对我可能尝试过的事情有一些模糊的记忆,但我无法从头脑中挑逗细节:

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

1 个答案:

答案 0 :(得分:1)

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

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