我目前正在寻找bug,需要在Visual Studio 2005的发布配置中调试特定的dll。 在某些时候,我关闭了解决方案,做了一些其他的东西并重新加载它。从那时起我的断点就不会被击中而且我得到臭名昭着的“没有符号已被加载......”的消息。所以我打开了模块窗口,我要调试的dll不再出现在列表中,因此我无法手动加载符号。应用程序行为正常,所以我绝对确定必须加载dll才能执行某些功能。果然,如果我重命名dll并启动应用程序它就不再起作用了,所以它也必须是正确的dll。
我尝试将dll项目设置为启动项目,并将命令执行到应用程序的exe并从Visual Studio外部启动应用程序然后附加到该过程,但都无济于事。
问题是,为什么dll不会出现在已加载模块的列表中,尽管它必须已加载?我想不出我做过的任何其他变化,可能导致这种变化,我错过了什么? (也许是非常明显的事情?)
任何帮助表示赞赏!
答案 0 :(得分:8)
使用process explorer 检查dll是否已加载。
附加流程时,请确保启用“本机”和“托管”代码类型(在代码类型选择选项中)。
另请参阅此问题:Visual Studio is not loading modules when attaching to process
答案 1 :(得分:3)
将项目从一台计算机转移到另一台计算机后,我遇到了类似问题。我将简单解释我发现的内容和我如何修复,您可以确定它是否适合您的问题和解决方案。
我编写应用程序的工作计算机包含我的程序引用的.dll文件。将应用程序移动到我的家庭计算机后,应用程序无法再找到之前引用的.dll文件,因为该文件已不再存在。
即使没有引用的资源(.dll文件),应用程序也已编译并运行,因为先前编译的程序集(调试文件夹)包含其自己的.dll文件副本和其他资源。简而言之,它是正在运行的旧程序集构建,而不是您正在处理的当前应用程序。这也是为什么此错误会在应用程序运行完毕后暂停设计器窗口并抛出错误的原因。
我会看看以下内容:
a)在解决方案资源管理器下,进入参考文件夹,然后右键点击缺少的参考节点,然后选择属性。在属性框中,观察所引用资源的路径。 资源是否仍位于此路径?
b)检查调试文件夹以获取您要查找的资源的副本。如果资源,请复制并将其保存到桌面。如果不存在,则从原始来源获取文件。
c)在解决方案资源管理器下,右键点击“属性”和“打开”。从显示的菜单中选择左侧和出现的新窗口顶部的“资源”,您应该看到“添加资源”并带有一个小的下拉箭头。 点击箭头并选择“添加现有文件”,然后浏览到文件。如果您没有看到它,则可能必须从“打开”和“取消”按钮上方的小下拉菜单中更改正在浏览的文件。找到文件后,它应该在解决方案资源管理器中创建一个名为“resources”的新文件夹。现在,该文件是应用程序的永久部分,而不仅仅是对它的引用。
答案 2 :(得分:2)
我今天遇到了与Visual Studio 2008相同的问题。我使用一个简单的测试器来测试程序集中的新方法。所以添加了对我的程序集的引用我编写了代码来加载程序集并调用新方法,构建,一切正常。但是在执行期间,调试器会抛出一个异常,说新的方法不存在,模块窗口是空的。
原来我正在修改的程序集在GAC中,并且在我的构建目录中使用而不是新的程序集。
答案 3 :(得分:1)
我在 Visual Studio 2017 Pro 上遇到了同样的问题,搜索了一周但没有运气,然后我安装了 VS2019 Pro 并用同一个项目进行了测试,但断点根本不起作用,并且模块中缺少项目的 DLL列表。 我在一个解决方案下运行多个项目,突然发现如果选择 project1 作为“启动项目”,则该项目的 DLL 仅加载到模块列表中。因此,当我测试 API 时,我将 API 项目切换为启动项目,现在观察到 API DLL 文件已加载到模块列表中。
右键单击您想要将其 DLL 文件包含在模块列表中的所需项目并将其设置为“启动项目”