1

我有一个使用 Visual Studio 开发的桌面应用程序,我需要更频繁地更新应用程序的一小部分。为了避免每次部署新安装程序的不便,我将更新频率更高的支持功能拆分为一个单独的项目,并将其编译为 DLL。桌面应用程序现在在运行时通过反射加载此 DLL,然后基于具有接口定义的共享 DLL 实例化其中的对象,如下所示:

Assembly a = Assembly.LoadFrom(supportDLLPath);
ISupportModuleInterface obj = (ISupportModuleInterface)a.CreateInstance("SupportCode.SupportObject");
if (obj != null)
{
    obj.OnTransferProgress += new FileTransferProgressHandler(obj_OnTransferProgress);
    obj.OnTransferComplete += new EventHandler(uploader_OnTransferComplete);
    obj.DoWork(packagePath)
}

它在大多数情况下都能正常工作,但我需要用它来调试问题,而且我无法可靠地让 Visual Studio 调试器进入它。有时候通过代码按F11,比如单步进入DoWork,它会自动定位我系统上DLL的源代码并显示出来。但是,当触发事件时,Visual Studio 只会在调用堆栈中显示 [External Code] 标记,我无法在支持项目的代码中导航。

是否有人对如何解决此问题有任何想法,以便我可以正确调试支持项目?谢谢!

4

2 回答 2

1

程序集是否列在“模块”窗口(调试 -> Windows -> 模块,或按“Ctrl-D,M”)中,是否列为“已加载符号”,符号从您加载的位置预计?(您可以通过右键单击并选择“加载符号...”来强制它加载符号。如果找不到匹配的符号文件,它将通过“打开...”对话框提示您)。

还要检查此窗口以确保模块未加载两次,并且程序集的版本/时间戳/位置是您所期望的。

最后检查“工具->选项->调试”下是否选中了“仅我的代码”,并查看取消选中它是否有所不同。

于 2009-06-02T19:37:14.873 回答
0

可以拆机吗?如果从我记得的情况来看是这样,它将为您提供创建 pdb 时源代码所在位置的路径。我必须这样做来调试 NHibernate,并且必须将源代码放在创建“pdb”文件时所在的确切路径上。之后,我可以毫无问题地进入源代码。

于 2009-06-02T19:24:08.237 回答