“断点目前不会被击中。源代码与原始版本不同。” 这是什么意思?


513

在Visual Studio中进行调试时,有时会添加一个断点,但它是空心的,VS会说“该断点当前不会被击中。源代码与原始版本不同。” 显然,这使我无法进行调试。

该消息到底意味着什么?什么原始版本?如果我刚刚打开解决方案并且未对代码进行任何更改,那么怎么会有“原始版本”?


36
在添加断点之前重新编译/构建项目
lexu

您是否正在打开用其他版本的Visual Studio编写的项目?
Mahesh Velaga

2
这是一个网站项目。无需显式构建它。它应该在使用时编译。我怀疑VS无法建立网站,但这并不是告诉我!Mahesh-不,所有相同版本的VS。
David

就我的情况..我有不同版本的相同代码(例如,Live版本和devolopment版本..的测试版本。当我打开devolopment版本并将断点放在test.cs时,给出了相同的错误,但我发现我将断点测试与实时版本sln相关的.cs类未开发,因此请检查CS是否已在构建解决方案中)
dankyy1

5
删除bin和obj目录比重建对我有用。
AycanYaşıt2014年

Answers:


276

如其所言,“源代码与原始版本不同”。

右键单击解决方案资源管理器中的项目文件夹,然后选择Clean。生成该项目的新版本,该断点将再次起作用!


120
使用清洁并不总是有效。我必须手动删除bin文件夹中的所有内容才能使其重新工作。
卡拉

3
我错误地在bin文件夹中引用了一个DLL。更正了参考路径。
布拉德·乌拉尼

39
对我来说,即使删除bin和obj文件夹也行不通。我也必须重新启动Visual Studio。
2014年

1
花了整整一天的时间找到解决方案。非常感谢您提供解决方案。
Racs

8
我关闭了VS,删除了所有bin和obj文件夹,重新构建了所有内容,仔细检查了构建配置,构建成功了。没有骰子。简单的事情不应该那么复杂。>:|
snarf,2015年

129

如果您在Debug构建配置中未选中DLL项目,则将永远不会构建新代码!

转至Build --> Configuration Manager ...(在VS2010中)并检查是否已检查包含您要调试的代码的项目的当前构建配置。


感谢您的建议奥利弗。这肯定不是在这里发生,如果我的一个项目没有建立,我会很快注意到。
大卫

3
我遇到了完全相同的问题,只是没有进行任何检查。它只是在该对话框中为x86构建的,而我的本地计算机是x64!因此,我选择了该Any CPU选项,然后它再次起作用。
JP赫勒蒙斯

3
在没有正当理由的情况下从调试配置中删除项目应该是一个主要的错误,因为该配置很可能由CI构建机使用(我知道它在这里),因此最终应该在失败时通过该配置。我知道这可能是许多构建步骤之一,但仍然... @Oliver我希望团队成员为您买了一些饼干!:)
Fetchez la vache 13-10-17

当我切换到x86而不是AnyCPU时,我遇到了这个问题。由于某些未知原因,它从构建中删除了项目。
亚当·佩德利

该项目在“配置管理器中的构建”中列出,因此恐怕对我没有帮助:(
Ortund

43

对我来说,当时是在进行WebSite项目。清理完这些临时文件夹后,我得到了正确的编译器错误:

  • C:\Documents and Settings\%username%\AppData\Local\Temp\Temporary ASP.NET Files
  • C:\windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files

当我发现我故意将一个类文件移入一个子文件夹,并以某种方式重新出现在根文件夹中时,我终于解决了该问题。VS在编辑另一个时正在使用那个。


2
清空Windows目录中的临时文件对我来说很有效,干杯!
克里斯·弗莱彻(ChrisFletcher)2012年

7
我只想添加一个类似的答案-确保项目ASP.NET使用的任何临时文件夹中都没有项目dll的旧副本,例如C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \如上所述的临时ASP.NET文件 -以及C:\ Windows \ Microsoft.NET \ Framework_64_ \ v4.0.30319 \临时ASP.NET文件。我用一切快速搜索这些副本
奥利弗·

12
快速提示:%localappdata%在搜索框中输入内容将带您直接进入C:\Documents and Settings\%username%\AppData\Local
dav_i 2013年

1
可以确认这在Visual Studio 2013中的Webservice项目上对我有用。
Moeri 2014年

做了所有这一切,但似乎没有帮助。我也很高兴看到这一点。
Ortund

40

你曾经做过吗?

您要继续并运行上一次成功的构建吗?

如果您勾选了该框并按“是”,即使您的项目没有编译,您也将获得上一次成功运行的构建。这意味着,无论何时设置断点,都会出现该错误。

尝试更改此值:

  • 工具类
    • 选件
      • 项目与解决方案
        • 生成并运行
          • 运行时,发生构建或部署错误时:不要启动

认为我没有那样做。不过感谢您的链接。它使我了解了提示的含义!
David

11
数十年来,Visual Studio一直使用此选项(至少VS98拥有它)。我从来不明白为什么有人会运行最后一次成功的构建。毕竟,如果那是我想要的,我将直接启动它,因为无论如何我都无法调试。不启动本来是更明智的默认设置。
OregonGhost 2010年

6
在我仍在编写无法编译的代码的过程中,我已经多次使用它来运行项目(无论出于何种原因,例如为了向其他人展示)。有时很方便。就个人而言,我禁用它。
Codesleuth

3
也许当他突然过来时,他们不得不表现出自己的上司。他们可能会击中f5,就像“您知道,它有效!”
Gigala '16

33

  • 工具类
    • 选件
      • 调试
        • 一般

取消选中“ 要求源文件与原始版本完全匹配”


17
@Rachmad此解决方案有效。但这似乎不是完整的解决方案,因为这意味着我们的源文件与原始版本不完全匹配
onmyway133

这正是我通过@entropy寻找的东西是正确的。尽管这允许设置断点,但事实是所使用的源与所使用的pdb不匹配。最好的解决方案是修复此问题。在无法完成的时间,这很好。
JamesG

即使未选中此选项,执行也不会达到断点,错误仍然存​​在
Ortund

12
这不是解决此问题的方法,而是一种解决方法。显然,我不想在调试器中使用过时的文件。
欧比万

2
@ObiWan不明显。我喜欢进行较小的编辑并继续调试,即使知道源代码和内部版本不同。
艾伦·巴尔吉

30

解决方案配置中选择调试,而不是发布

菜单屏幕截图


1
这是我的问题。我已经在调试模式下进行了编译,更改了代码,然后在发布模式下运行了它。难怪调试器认为代码是不同的-调试符号不同的。当我按照其他人的建议删除bin文件夹时,出现错误“该文档未加载任何符号”。直到那时,我建立了联系,并走向了这个答案。需要更多票!
indot_brad

即使在“调试”构建配置中,也有可能禁用该项目以进行构建。需要检查构建配置,调试/发布配置之间的触发器毫无意义。
Asad Saeeduddin 2014年

这对我也是。尝试清洁,但重建其他参考解决方案均无济于事。没注意到解决方案正盯着我
Adam Hey

这就是我发生的事情-我正在构建我的项目并一遍又一遍地替换我的dll,但是问题不会消失。当我从/ bin / debug文件夹替换dll时,我意识到代码是在Release模式下构建的。愚蠢的我。
displayName

我想附加到以发布模式构建的进程。切换到调试解决了我的问题。
Fivef

27

注意VS中的“输出”窗口。它会告诉您什么程序集被加载以及何时被加载。您可能会看到该文件夹​​中某个位置的程序集的较旧版本正在加载。

例如,如果您有多个程序集,而您当前正试图插入其中一个支持程序集,则CLR将处理程序集解析,这可能会加载比您在项目中引用的程序集文件还要多的另一个程序集文件。


1
同样值得记住的是,但是我认为这不是问题所在,因为我试图进入一个网站项目,而不是一个类库。
David

24

关闭Visual Studio并重新打开解决方案可以解决此问题,即,这是IDE本身(我正在运行VS2010)内的错误。

如果您有多个Visual Studio实例在运行,则只需关闭正在运行有问题的解决方案的实例。


4
关闭Visual Studio也对我有用。此外,还可以执行“清理/重建”操作。
danielB 2014年

3
这修复了VS 2015中的解决方案
TaintedLemon

3
VS 2017中的固定问题
Daniel Fisher lennybacon,

解决了VS 2012中的问题
seebiscuit

19

从Visual Studio 2017 15.3.1到15.3.5,已经出现了解决此问题的新方法。如果您使用EditorConfig,则该charset=utf8选项会导致这些症状。VS团队复制了此内容,并表示他们正在研究

因此,一种解决方法是注释掉您的 charset=utf8在.editorconfig文件中行。

编辑:自VS 15.5起应该修复。


截至两天前(2017年10月9日),状态现在为“已修复-待发布”。这是个好消息,因为UTF-8是当今文本编码的唯一明智的默认设置。:-)
rmunn

我还注意到,此问题的最终原因显然是另一个错误修正该错误修正charset=utf8被解释为“带BOM的UTF-8”。将解释更改为“无BOM”会破坏一些其中包含BOM的UTF-8文件。因此,如果遇到此问题并且尚未发布Visual Studio修复程序,请尝试从文本文件的开头删除BOM,这可能会解决此问题。(此评论恳求零机翼参考... :
rmunn

这也是我的问题。目前,此问题尚未解决或至少已发布,或者已重新引入错误(版本15.4.2)
avidenic

12

如果您使用的是对二进制文件的文件引用(而不是对项目中代码的项目引用),并且您所引用的编译二进制文件与计算机上的相应源代码不同步,则通常也会发生这种情况。之所以会发生这种情况,是因为您从源代码管理中下载了新版本的二进制文件,但没有附带新的源代码,或者您的计算机上有几个版本的二进制文件,并且正在引用旧副本,等等。如果确实如此这个问题,这是一个尽可能多地使用项目引用的充分理由。


我明白了你的意思,这是值得牢记的,但未来的问题是网站项目,而不是类库。
David

当选择遗留代码时,这是一个常见问题,这使我不禁思索哪个天才决定从解决方案中的一个项目引用一个dll,而该dll仅由该解决方案中的另一个项目使用。感叹
Kell,


7

当系统时间在调试时或在调试会话之间更改时,无论是通过编程方式,手动方式还是通过外部程序,都可能发生这种情况。


我无法为此+1。我最近重新安装了Windows,却没有注意到系统时钟已关闭。果然,此更改将所有内容搞砸了,并重建了整个解决方案/项目,从而神奇地修复了它。
凯尔·巴兰

7

对于我来说,几乎没有什么感觉可以解决此问题。如果存在未击中断点的特定源文件,则可以将其列出在

  • 解决方案资源管理器
    • 右键单击解决方案
      • 物产
        • 共同属性
          • 调试源文件
            • “不要查找这些源文件”。

由于某些我不知道的原因,VS 2013决定将源文件放在该文件中,随后,我再也无法在该文件中遇到断点了。这可能是“源代码与原始版本不同”的罪魁祸首。


我面临着完全相同的问题。您的回答对我有所帮助!谢谢!+1
jweyrich 2015年

5

问题是您的调试信息与程序集不同步。解决方案很简单:

  1. 转到您的bin文件夹
  2. 删除.pdb文件
  3. 重建

应该做的把戏!

(很奇怪的是,在不丢弃.pdb文件的情况下进行重建并不总是可行。我可以看到修改的日期正在更新,但是仍然在链中的某个位置(VS2013调试器,IIS,程序集缓存),未检测到此更改)


Build-> Clean Solution还应该完成删除需要删除的文件。
戴夫

在由于此问题而浪费大量时间之后,此解决方案就成功了。Thx FrankyHollywood
AD

4

当您使用激活器并且设置断点的程序集尚未加载时,您会收到此消息。

一旦激活程序加载了程序集,断点将解决(假设程序集和调试符号是最新的)。一个不错的地方是调试菜单中的模块窗口。您也应该在此处查找文件所属的程序集。首先检查组件是否已加载。然后,从哪里加载?然后,加载符号文件。同样,符号文件从何处加载?最后检查两者的版本。


4

我也遇到了这个。导致我出现问题的情况:

  • 我在本地运行完整的IIS7实例
  • 我正在将软件版本化到单独的项目中

我是通过打开以前的版本引起的(VS提示在IIS调试中提示我是否要指向该实例,我回答“是”),然后打开当前版本(再次以“是”响应IIS提示) ),然后尝试在先前版本中进行调试。

为了解决这个问题,我仅关闭并重新打开了先前的预期版本,然后再次将其声明为调试源。


3

尝试在调试模式下运行时禁用并重新设置断点,而不要在启动调试模式之前执行此操作。


3

在调试C ++项目时,也会发生这种情况,该项目会加载已使用某些CRL语言(托管C ++,C#等)实现的模块。在这种情况下,错误消息的确会引起误解。

解决方案是将公共语言运行库(CLR)支持配置属性放入启动项目,然后重新编译该属性。


3

如果您的解决方案中多个项目,请确保将正确的项目设置为StartUp Project。要将特定项目设置为解决方案的“启动项目”,请右键单击该项目,然后选择Set As StartUp Project

正确设置启动项目后,线程已达到所需的断点。


值得一提的是,如果您的断点在一个不是您的启动项目的项目中,并且它不能成为您的启动项目(因为例如您需要将另一个项目作为启动项目),则可以(在启动主项目之后)右键单击并选择Debug >> Start New Instance,该项目具有您要命中的断点
Caius Jard

3

我在vs2017的32位版本中体验了这一点。

确实没有一种解决方案对我有用。我重新启动,清除了IDE文件,清理了构建的解决方案,从git repo中拉出了文件,并重新构建了该解决方案。

我从nuget中获取了64位的依赖关系,并且在使用该程序集后,就不再将这些源构建到最终的可执行文件中,而是构建了IDE缓存的源。

我删除了nuget配置,删除了引用的程序集,下载了源代码,手动构建了log4net,对其进行了签名,将其添加到项目中的文件夹中,添加了对它的引用,然后我可以再次进行调试。

这很痛苦,我希望它能出现在答案列表中,以供所有人查看。

编辑:尽管在IDE设置中启用了“提示生成错误”选项,但是在生成期间没有错误。


3

对我来说,解决方案隐藏在Advanced Build Settings项目属性的中: 在此处输入图片说明

出于未知原因,它设置为none:将其设置为full导致击中断点。

要进入此对话框,请打开项目属性,然后转到Build,然后选择Advanced...页面底部的按钮。


3

我在分层体系结构项目中的多个项目中遇到了相同的问题,问题是在配置中尚未选中所选项目的“生成”复选框。因此,该问题已在一个项目中解决。

对于另一层,即使在配置中启用了构建,也给同样的麻烦。我做了所有其他选择,例如重新开始清理项目,但是没有一个帮助。最后,我取消选中该特定项目的构建复选框,然后清理并重新构建。再次标记了该复选框并执行了相同的操作。然后问题解决了。

希望这可以帮助..


2

就我而言,我是在VS 2012中附加一个正在运行的进程。附加时,您可以选择以各种模式进行调试(本机,脚本,silverlight,托管2.0,托管4.0等)。默认情况下,调试器会自动选择模式。但是,“自动”并不总是做出正确的选择。如果您的进程包含多种类型的代码,请确保调试器使用的是正确的代码。


以我为例,我附加到w3wp.exe来调试.NET代码,但由于某种原因,它附加了无法看到我的C#断点的脚本调试器。将其更改为.NET调试器可以使我的C#断点正常工作。
奥兰·丹尼森

2

就我而言,我正在开发一个Windows CE应用程序,该应用程序已针对模拟器进行了测试。问题在于可执行文件没有部署到仿真器中,因此(在开发环境中).pdb与.exe(在仿真器中)不同步,因为从未将新的.exe复制到仿真器中。我必须在模拟器中删除.exe才能强制进行新部署。然后它起作用了。


2

对我有用的是将解决方案平台从x86更改为Any CPU。更改为“任意”后,我设置了一个停止地址,运行了网站,打开了页面,单击了按钮,然后它停止了。我关闭了站点,改回x86并成功执行了相同的顺序。


2
也许选择CPU根本不影响问题,而仅仅是强制重建?
jwg 2013年

它将使用另一个bin文件夹,您的任何cpu映射中可能都有一个旧的dll。
卡拉

在活动平台x86(我从未使用过)上,切换回Win32时,我遇到了这个问题。PC是一台共享的PC,因此其他人可以出于任何原因设置该平台。
扎克2015年

2

在Windows 7,Visual Studio Express 2010下,如果您已激活使用对Windows XP SP3使用兼容模式选项,则可能会发生此错误。

我取消选中该选项,它再次完美运行。右键单击VS或可执行文件的快捷方式,选择属性,然后兼容性


1
此处可能发生的情况是,当禁用兼容模式时,发行版配置将从x32更改为x64,并且可能没有选择要在x32中进行构建的所有项目。为什么必须禁用某些项目才能在x32中构建,这是您必须与团队成员讨论的事情。
Asad Saeeduddin 2014年

那正是我的问题。谢谢!
Johan Holtby 2014年


2

这件事发生在我身上,因为我在解决方案中还有其他未在建设的项目。卸载那些有问题的项目后(在解决方案资源管理器中右键单击该项目->卸载项目),重新构建解决方案并再次运行-断点被击中!


2

我将现有文件添加到项目后,它恰好在Visual Studio 2017上。这为我工作:

  1. 关闭解决方案,
  2. SolutionFolder\.vs\SolutionName\v15\sqlite3并删除storage.ide
  3. 再次打开解决方案

感谢您的解决方案!没有工作之前,这节省了我的一天:)
StefanaB

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.