我创建了一个 .Net (C#) DLL,以便通过 COM 从旧版应用程序中使用。我可以启动旧版应用程序、实例化 COM 对象并使用它——没问题。我可以启动(或切换回)Visual Studio,选择调试/附加到进程,然后选择旧应用程序进程。然后,所有源文件旁边都有“锁定”图标,VS 标题栏更改为项目名称旁边有“(运行)”。我可以设置断点,并且从旧版应用程序中执行 COM 对象允许我逐步调试。但是,VS(当然)不允许编辑代码来修复问题(甚至更正注释中的拼写错误)。Debug / Windows / Modules 窗口显示旧进程和我的 DLL 以及已为我的 DLL 加载的符号。退出旧版应用程序(不足为奇)会移除“锁定”
如果我将 COM 对象的项目设置为启动(在解决方案设置中),将项目的调试页面设置为“启动外部程序”并按 F5 启动旧版应用程序,我可以实例化和运行 COM 对象。标题栏再次显示“(正在运行)”并出现锁定图标。将鼠标悬停在断点上会显示一个工具提示,显示我们在哪里——
进程“legacyapp.exe”中的文件名.cs,第 x 行字符 y(“namespace.class.method()”)
但是断点不会停止,模块窗口是空的——旧应用程序和我的 DLL 都没有显示在那里。(所以我想调试不起作用也就不足为奇了。)
我知道我已经能够在 Visual Studio 2010 中成功地完成“通过启动外部程序来调试基于 .Net 的 COM DLL”的事情。有谁知道可能导致这种情况的原因,更重要的是,我有任何建议可以尝试让它工作吗?