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

Iai*_*ser 6 .net c# visual-studio-2008 visual-studio

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

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

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

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

Mik*_*ray 1

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

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