代码之家  ›  专栏  ›  技术社区  ›  jasonh

VisualStudio2005:调试来自不同项目的C#代码?

  •  1
  • jasonh  · 技术社区  · 16 年前

    我有一个用VisualStudio开发的桌面应用程序,我需要更频繁地更新应用程序的一小部分。为了避免每次部署新安装程序带来的不便,我将更新频率更高的支持函数拆分为一个单独的项目,并将其编译为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)
    }
    

    它在大多数情况下工作正常,但我需要调试一个问题,并且无法可靠地让VisualStudio调试器介入其中。有时在代码中按F11键时,例如在进入DoWork时,它会自动在我的系统上找到DLL的源代码并显示它。但是,当触发事件时,VisualStudio只在调用堆栈中显示[External Code]标记,我无法在支持项目中的代码内部导航。

    有没有人知道如何解决这个问题,以便我能够正确调试支持项目?非常感谢。

    2 回复  |  直到 16 年前
        1
  •  1
  •   Justin    16 年前

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

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

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

        2
  •  0
  •   epitka    16 年前