"断点当前不会被击中.源代码与原始版本不同." 这是什么意思?

Dav*_*vid 492 .net debugging visual-studio

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

消息到底意味着什么?什么原始版本?如果我刚刚打开解决方案并且没有对代码进行任何更改,那么如何才能有"原始版本"?

小智 261

正如它所说,"源代码与原始版本不同".

右键单击解决方案资源管理器中的项目文件夹,然后选择Clean.构建项目的新版本,断点将再次运行!

  • 使用清洁并不总是有效.我必须手动删除bin文件夹中的所有内容才能让它再次运行. (114认同)
  • 对我来说,即使删除bin和obj文件夹也不起作用.我也不得不重启Visual Studio. (39认同)
  • 我已关闭VS,删除所有bin和obj文件夹,重建所有内容,双重检查构建配置,构建成功.没有骰子.简单的事情不应该这么复杂.>:| (7认同)
  • 从 bin 和 obj 文件夹中删除文件后它仍然无法工作。 (4认同)
  • 我错误地在bin文件夹中引用了一个DLL.修正参考路径固定. (3认同)

Oli*_*ver 122

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

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

  • 我有完全相同的问题,只是没有任何未检查.它只是在该对话框中为x86构建,而我的本地机器是x64!所以我选择了"Any CPU"选项,它再次起作用. (3认同)
  • 在没有正当理由的情况下从调试配置中删除项目应该是一个重要的罪,因为CI构建机器可能会使用该配置(我知道它在这里),所以最终可以在它失败时通过它.我知道它可能是许多构建步骤中的一个,但仍然...... @Oliver我希望团队成员给你买了一些饼干!:) (3认同)

Ant*_*yVO 42

对我来说,这是在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正在使用那个.

  • 只需一个快速提示:在搜索框中键入`%localappdata%`可直接转到`C:\ Documents and Settings \%username%\ AppData\Local` (12认同)
  • 我只是想添加一个类似的答案 - 确保在ASP.NET使用的任何临时文件夹中没有项目的dll的旧副本,例如**C:\ Windows\Microsoft.NET\Framework\v4. 0.30319 \临时ASP.NET文件** - 如上所述 - 但也是**C:\ Windows\Microsoft.NET\Framework_64_\v4.0.30319\Temporary ASP.NET Files**.我使用[Everything](http://www.voidtools.com/download.php)[快速搜索这些副本](http://shades-of-orange.com/post/2012/10/05/Everything都具有一个-停止工作的). (7认同)
  • 清空windows目录中的临时文件对我有用,干杯! (2认同)

Cod*_*uth 38

你做过这个吗?

你想继续并运行最后一次成功的构建吗?

如果您勾选方框并按下"是",即使您的项目未编译,您也将获得最后一次成功构建.这意味着无论何时设置断点,都会出现该错误.

尝试更改此值:

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

  • 几十年来,Visual Studio已经有了这个选项(至少VS98有它).我永远不明白为什么有人想要运行最后一次成功的构建.毕竟,如果那是我想要的,我会直接启动它,因为我无论如何都无法调试.不发射会是一个更明智的默认. (11认同)
  • 我已经使用它几次运行项目(无论出于何种原因,只是为了显示其他人),而我仍然在编写无法编译的代码.*有时*它很方便.就个人而言,我让它残疾. (6认同)
  • 也许如果他们突然来到时他们必须展示自己的优势.他们可以击中f5,就像"你看,它有效!" (3认同)

小智 30

  • 工具
    • 选项
      • 调试
        • 一般

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

  • @Rachmad此解决方案有效.但它似乎不是完整的解决方案,因为它意味着我们的源文件与原始版本不完全匹配 (17认同)
  • 这不是解决此问题的方法,而是一种解决方法.显然我不想在调试器中使用过时的文件. (10认同)
  • 即使未选中此选项,执行也不会到达断点并且错误仍然存​​在 (2认同)
  • @ObiWan 不明显。即使知道源代码和构建版本不同,我也喜欢进行较小的编辑并继续调试。 (2认同)

Adi*_*tin 29

Solution Configurations中选择Debug,而不是Release

菜单截图


Tor*_*mod 25

注意VS中的"输出"窗口.它将告诉您加载的程序集和时间.您可能会看到正在加载文件夹中某个位置的旧程序集.

例如,如果您有多个程序集并且当前正在尝试中断其中一个支持程序集,则CLR将处理程序集解析,这可能会加载另一个程序集文件而不是您在项目中引用的程序集文件.


小智 24

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

如果运行多个Visual Studio实例,则只需关闭运行解决方案的实例.

  • 关闭Visual Studio也适合我.此外,使用清洁/重建操作. (4认同)
  • 这解决了VS 2015中的解决方案 (3认同)
  • 修复了VS 2017的问题 (3认同)

Joh*_*ton 19

从Visual Studio 2017 15.3.1到15.3.5开始,出现了解决此问题的新方法.如果您使用的是EditorConfig,则该charset=utf8选项会导致出现这些症状.VS团队重现了这一点并表示他们正在努力.

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

编辑:这应该从VS 15.5开始修复.

  • 这个错误在 2023 年仍然(或再次)存在。简而言之 - editorconfig 中的字符集和 .cs 文件的编码需要相同。 (3认同)

Mik*_*ney 10

如果您使用对二进制文件的引用(而不是对项目中的代码的项目引用),并且您引用的已编译二进制文件与计算机上的相应源代码不同步,则通常也会发生这种情况.这可能是因为您从源代码控制中下载了新版本的二进制文件而没有随其附带的新源代码,或者您的计算机上有二个版本的二进制文件并且引用了旧版本等等.如果确实如此问题是,尽可能使用项目引用是一个很好的理由.


Meh*_*aki 8

对我来说,没有一个项目解决了这个问题.我刚刚在该函数中添加了一行新代码,例如:

int a=0;
Run Code Online (Sandbox Code Playgroud)

通过添加,我想我触发了visual studio将此功能添加到原始版本


小智 7

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


JBS*_*rro 7

有一个几乎难以察觉的设置为我解决了这个问题.如果存在断点未命中的特定源文件,则可以在其中列出

  • Solution Explorer
    • 右键单击解决方案
      • 属性
        • 共同属性
          • 调试源文件
            • "不要寻找这些源文件".

由于某些我不知道的原因,VS 2013决定在那里放置一个源文件,然后,我再也无法在该文件中找到断点.这可能是"源代码与原始版本不同"的罪魁祸首.


小智 7

我只是为我重新加载、清理和重建作品。


小智 5

当调试加载已使用某些 CLR 语言(托管 C++、C# 等)实现的模块的 C++ 项目时,也会发生这种情况。在这种情况下,错误消息确实具有误导性。

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


bak*_*ole 5

我也遇到过这种情况。导致我的问题的条件:

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

我是通过打开以前的版本(VS 提示询问我是否要在 IIS 调试中指向此实例,我回答“是”),然后打开当前版本(再次用“是”响应 IIS 提示)造成此问题的),然后尝试在以前的版本中进行调试。

为了解决这个问题,我只是关闭并重新打开之前的预期版本,再次将其断言为调试源。


Fra*_*ood 5

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

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

应该做的把戏!

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


dis*_*ame 5

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

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


riq*_*ang 5

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

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

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


小智 5

我在 VS2019 中遇到此错误,我认为它在 Windows 时钟更改时开始发生。


AKA*_*ASH 5

退出VS。-> 删除 .vs 文件夹。-> 打开VS。-> 运行项目。

上述解决方案对我有用。希望这也会对您有所帮助。