调试在运行时链接的dll

时间:2013-08-12 12:35:27

标签: 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 = Activator.CreateInstance(engineCoreType);

Visual Studio是否可以在此方案中提供其常规调试工具?我该如何配置?

2 个答案:

答案 0 :(得分:11)

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

请注意,在此方案中,从不使用Assembly.LoadFile(),它会加载没有加载上下文的程序集。一个昂贵的词,意味着CLR不关注DLL的来源,并允许您多次加载DLL。本身解释了为什么调试器无法找到PDB。始终使用LoadFrom()代替。

答案 1 :(得分:8)

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