Visual Studio 2010 - 调试 / 构建问题

6
我正在使用Visual Studio Professional 2010和Team Foundation Server Express(beta)。我的VS项目(C#.Net / WPF)已从没有TFS的VS 2008迁移到了带有TFS的VS 2010。
每当我对我的代码进行更改并尝试调试应用程序时,我会收到诸如“此断点将不会被触发”(德语:Der Haltepunkt wird momentan nicht erreicht. Der Quellcode weist Unterschiede zur Originalversion auf.)等消息,并且该项目将使用旧的可执行版本(最后一个成功构建的版本)。没有错误发生,代码正常,但更改也未应用。
当我手动清理和重建项目时,一切都运转良好 - 但是必须解决此问题吗?
编辑:我刚刚向我的VS解决方案添加了一个新项目并在TFS服务器上检入它。使用这个新项目,问题就不会出现。即使我添加了与上述项目中使用的相同依赖项,新项目的调试和构建也能正常工作,而不会出现上述错误。
也许这些信息可以帮助您引导我找到解决方案。

1
我曾经遇到过同样的问题。但是通过以下方法解决了我的问题:在项目的属性页面中,进入启动选项,并标记本地代码。这对我有用,希望对你也有用。 - SandBag_1996
嗯,感谢您的建议,但我无法通过这种方式解决问题。无论如何还是+1鼓励一下;-)。 - dhh
6个回答

3

目前还不清楚现有的答案是否足够。我无法确定确切的原因,但是我可以详细介绍一些可能出现问题的地方。

我经常看到的第一个区域是当项目直接引用程序集时。您可以创建一个创建程序集的项目。另一个项目可能使用该程序集,并且您可以通过程序集直接引用(而不是添加对“项目”的引用)。这将使VS无法真正了解它需要首先“构建”那个被引用的程序集,有时会与调试符号(PDB)失去同步。您可以在引用属性中查看项目是否已被引用或程序集是否已被引用(在“解决方案资源管理器”中展开“引用”,右键单击引用,然后选择“属性”)。引用的项目将没有“特定版本”属性,而程序集引用将有。有时您也可以从“项目依赖项”中看出来。如果您引用了另一个项目生成的程序集,但该项目不是“项目依赖项”中的依赖项,则可能是程序集引用。要解决此问题,通常只需删除引用并添加对项目的引用即可。

我还发现有时断点会使调试器混乱。如果我有很多断点或它们已经存在了很长时间,调试器有时会出现一些奇怪的问题。如果我删除所有现有断点(调试/删除所有断点)并重新应用它们,调试器通常会更加愉快。


我刚刚检查了所有使用的引用,但是没有发现任何错误。然而,删除并重新添加所有依赖项无论如何都解决了问题。我将把这篇帖子标记为答案,因为它是最合适的回复。 - dhh

2
我的猜测是你把断点放在程序无法访问的地方。
例如:
const int x = 5;

if(this.x == 1)
   //do sth <--- breakpoint here

不,这不是问题所在。我甚至在主窗口构造函数的第一行添加了断点,但消息仍然出现。手动清理并重新构建项目后,一切都正常工作了(如我最初的问题描述)。 - dhh

2

如果您在运行混合模式应用程序(非托管本机C++和托管C#),请确保在C#应用程序的属性窗口中设置启用非托管代码调试


2

您可以在此处 查找答案。程序集可能在全局程序集缓存(GAC)中,也可能在一个项目中,或者有些项目需要重新生成pdb文件,这些文件用于调试。如果您选择不重建,它可能会使用旧的pdb文件。


1

你必须重新构建,没有更简单的方法。

程序数据库文件(PDB)需要重新创建。您还应该将配置设置为调试模式。

此外,问题的第一个答案也应该有所帮助。


0

当我以管理员身份启动VS时,这种情况也发生在我身上,当项目设置为与我在此项目中使用的DLL不同的架构时,这种情况也发生在我身上。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接