调试运行时链接的dll

11

为了实现模块化,我在运行时链接到我的解决方案中的一个dll,而不是在编译时链接,以便我可以独立更新它。当我在库项目中放置断点时,在连接到类并创建类型时,这些断点不会触发。

供参考,以下是反射代码:

Assembly a = Assembly.LoadFile(FULL_APPLICATION_CACHE + targetVersion + "\\Core.dll");
Type engineCoreType = a.GetType("Core.EngineCore");
object instance = Activator.CreateInstance(engineCoreType);

在这种情况下,Visual Studio是否能够提供其正常的调试工具?我该如何配置它?


这里有一个相关的有用帖子链接 - RBT
2个回答

12

调试器需要能够找到程序集的.pdb文件。您可以从“调试器+窗口+模块”窗口对此进行诊断。右键单击DLL并选择符号加载信息,它会显示调试器查找PDB的位置。

请注意,在此场景中,您绝不能使用Assembly.LoadFile(),因为它会在没有加载上下文的情况下加载程序集。这是一个昂贵的词,意味着CLR不关心DLL来自何处,并允许您多次加载DLL。这本身就是解释为什么调试器无法找到PDB的原因。请始终使用LoadFrom()。


你能不能详细阐述一下或者给我提供更多关于使用上下文的好处的信息?这不是我之前考虑过的事情,感谢您的建议。 - Venatu
2
任何介绍 .NET 的中间书籍都会包含这个内容。 - Hans Passant

8

你需要确保.pdb文件与你正在加载的dll文件位于同一位置。这样,Visual Studio将加载该数据并允许它在断点处停止。


pdb文件已经被复制到相同的目录,但仍然无法触发断点。它们被标记为“断点将不会被命中。该文档没有加载任何符号”。感谢建议。 - Venatu
你是正确的,谢谢!我使用的复制方法没有覆盖以前的版本。 - Venatu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接