2009-06-02 90 views
1

我有一个桌面应用程序,我用Visual Studio开发,我需要更频繁地更新应用程序的一小部分。为了避免每次部署新安装程序带来的不便,我将更频繁更新的支持功能拆分为单独的项目并将其编译为DLL。现在的桌面应用程序在与反射运行时加载这个DLL,然后进行实例化与接口定义的共享DLL里面的对象,像这样:Visual Studio 2005:调试来自不同项目的C#代码?

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仅在Call Stack中显示[External Code]标记,并且我无法在支持项目中的代码中导航。

有没有人有任何想法如何解决这个问题,所以我可以正确调试支持项目?谢谢!

回答

1

是否在“模块”窗口(调试 - > Windows - >模块,或按“Ctrl-D,M”)中列出了程序集,并且它是否列为“符号加载”你期望的位置? (您可以通过右键单击并选择“加载符号...”来强制加载符号,如果找不到符合它的符号文件,将会弹出一个“打开...”对话框)。

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

最后检查是否在“工具 - >选项 - >调试”下点击“Just My Code”,看看是否取消选中它会有所作为。

+0

成功!它在将它指向PDB文件并重新启动项目之后将其拾取。 – jasonh 2009-06-02 19:45:22

0

你可以进入反汇编吗?如果从我记得的内容来看,它会给你一条通往创建pdb时的源代码的路径。我必须这样做来调试NHibernate,并且必须将源代码放在创建'pdb'文件时的确切路径上。之后,我可以毫无问题地进入源代码。

+0

不幸的是,没有。我右键单击[外部代码]并禁用了“转到反汇编”。我尝试添加.pdb文件位于选项 - >调试 - >符号下的位置,但仍无法识别DLL中的任何内容。 – jasonh 2009-06-02 19:30:03