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

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

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

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

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

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

最佳答案

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

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

关于c# - 如何调试通过 Assembly.Load(byte[]) 加载的程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13004580/

相关文章:

c# - 用于检索所有子节点的 Linq-to-XML

c# - 141 是可以同时设置动画的 WPF 面板项的最大数量吗?

c# - Excel Interop - 保存前设置文件名

visual-studio - Visual Studio 2019 - 包未正确加载

c - 为什么 strcpy 编译为文字?

java - Visual Studio + Xamarin 中不受支持的 major.minor 版本 52.0

c# - 如何在继续之前等待 StartCoroutine() 完成

c# - 将此 XML 文档转换为我的对象的最简单方法是什么?

c# - 防止使用 datacontractjsonserializer C# 序列化属性

c# - System.IO.File.Copy 抛出 System.UnauthorizedAccessException