C# 在运行时调试链接到的dll

C# 在运行时调试链接到的dll,c#,visual-studio,reflection,visual-studio-2012,visual-studio-debugging,C#,Visual Studio,Reflection,Visual Studio 2012,Visual Studio Debugging,为了模块化,我在运行时而不是在编译时链接到解决方案中的dll,以允许我独立地更新它。在库项目中放置断点时,当类链接到并且创建了类型时,不会触发断点 作为参考,这是反射代码: Assembly a = Assembly.LoadFile(FULL_APPLICATION_CACHE + targetVersion + "\\Core.dll"); Type engineCoreType = a.GetType("Core.EngineCore"); object instance = Activa

为了模块化,我在运行时而不是在编译时链接到解决方案中的dll,以允许我独立地更新它。在库项目中放置断点时,当类链接到并且创建了类型时,不会触发断点

作为参考,这是反射代码:

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

VisualStudio是否可以在此场景中提供其正常的调试工具?如何配置此功能?

您需要确保.pdb文件与正在加载的dll位于同一位置。Visual Studio随后将加载该数据并允许其在断点处停止。

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


请注意,永远不要使用Assembly.LoadFile()。在这种情况下,它加载程序集时没有加载上下文。一个昂贵的词,意味着CLR不注意DLL的来源,允许您多次加载DLL。这本身就是为什么调试器找不到PDB的解释。始终使用LoadFrom()。

pdb文件正在复制到同一目录,但它仍然不会触发断点。它们被标记为“不会命中断点。没有为此文档加载任何符号”。谢谢你的建议,虽然你是对的,谢谢!我使用的复制方法没有覆盖以前的版本。您能详细介绍一下或将我链接到有关使用上下文的好处的更多信息吗?这不是我以前考虑过的问题,谢谢你的建议。任何关于.NETA的中介书都会提到这一点。这是一篇有用的相关文章。