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

在Visual Studio中进行debugging时,有时我会添加一个断点,但是它是空的,VS表示“断点不会被打中,源代码与原始版本不同”。 显然这阻止了我能够debugging。

这信息是什么意思? 什么原始版本? 如果我刚刚开放了解决scheme,并没有对代码做任何改变,那么怎么会有一个“原始版本”呢?

正如它所说的,“源代码与原始版本不同”。

右键单击解决scheme资源pipe理器中的项目文件夹,然后select“ Clean 。 build立一个新的版本的项目,断点将再次工作!

如果您没有选中debugging版本configuration中的DLL项目,那么您的新代码将永远无法build立!

转到Build --> Configuration Manager ... (在VS2010),并检查是否包含您正在尝试debugging代码的项目检查当前的生成configuration。

对于我来说,这是一个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正在使用那个,而我正在编辑另一个。

你有没有这样做?

你想继续并运行最后的成功构build?

如果勾选了该框并按下“是”,即使您的项目没有编译,您也将获得最后一次成功的构build。 这意味着每当你设置一个断点,你将会得到这个错误。

尝试更改此值:

  • 工具
    • 选项
      • 项目和解决scheme
        • build立和运行
          • 运行时,发生构build或部署错误时:不要启动

  • 工具
    • 选项
      • debugging
        • 一般

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

解决schemeconfiguration中selectdebugging ,而不是发布

菜单的屏幕截图

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

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

closuresVisual Studio并重新打开解决scheme可以解决这个问题,也就是说,这是IDE本身内部的错误(我正在运行VS2010)。

如果运行了多个Visual Studio实例,则只需closures运行问题解决scheme的实例即可。

从Visual Studio 2017 15.3.1到15.3.5,出现了一个新的方法来解决这个问题。 如果您使用EditorConfig , charset=utf8选项会导致这些症状。 VS队已经转载了这个信息,并表示他们正在努力 。

所以一个解决办法是在.editorconfig文件中注释掉你的charset=utf8行。

有一个几乎难以察觉的设置,为我解决这个问题。 如果有一个特定的源文件,其中断点没有打,它可以被列入

  • Solution Explorer
    • 右键单击解决scheme
      • 属性
        • 通用属性
          • debugging源文件
            • “不要查找这些源文件”。

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

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

当系统时间在debugging期间或debugging会话之间改变时,可能会发生这种情况,无论是编程,手动还是外部程序。

当你使用一个激活器时,你可以得到这个消息,你设置断点的程序集还没有被加载。

一旦激活器加载程序集(假定程序集和debugging符号是最新的),断点将被parsing。 一个好的地方是在debugging菜单中的模块窗口。 在那里你应该寻找你的文件所属的程序集。 首先检查assembly是否已装入。 那么,从哪里加载? 然后,是符号文件加载。 再次,从哪里加载符号文件? 最后检查两者的版本。

我也遇到了这个。 造成我的问题的条件是:

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

我通过打开以前的版本(VS提示问我是否想在IISdebugging中指向这个实例,我回答'是'),然后打开当前版本(再次响应IIS提示符'Yes' ),然后尝试在以前的版本中进行debugging。

为了解决这个问题,我只是closures并重新打开了以前的和预期的版本,再次声明它是debugging源。

在debugging加载已经用一些CRL语言(Managed C ++,C#等)实现的模块的C ++项目时,也会发生这种情况。 在这种情况下,错误信息确实是误导性的。

解决scheme是将公共语言运行时(CLR)支持configuration属性放到启动项目并重新编译。

问题是您的debugging信息与您的程序集不同步。 解决scheme很简单:

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

应该做的伎俩!

(奇怪的是,没有扔掉.pdb文件的重build并不总是工作,我可以看到修改date正在更新,但仍然在链(VS2013debugging器,IIS,程序集caching)的某个地方,这种变化没有被检测到)

在我的情况下,我附加到VS 2012中运行的进程。附加时,您可以select以各种模式(native,脚本,silverlight,托pipe2.0,托pipe4.0等)进行debugging。 默认情况下,debugging器自动select模式。 但是,自动并不总是做出正确的select。 如果您的进程包含多种types的代码,请确保debugging器正在使用正确的代码。

在我的情况下,我正在开发一个Windows CE应用程序,testing对模拟器。 问题是可执行文件没有部署到模拟器中,所以.pdb(在开发环境中)与.exe(在模拟器中)不同步,因为新的.exe文件从未复制到模拟器。 我不得不删除模拟器中的.exe来强制一个新的部署。 然后它的工作。

尝试在debugging模式下运行时禁用和重新设置断点,而不是在启动debugging模式之前进行。

我的工作是将解决scheme平台从x86更改为任何CPU。 更改为Any后,我设置了一个停止地址,运行该网站,打开该页面,单击该button并停止。 我closures了该网站,改回到x86,并成功地执行了相同的序列。

在Windows 7,Visual Studio Express 2010中,如果您激活了Windows XP SP3的“使用兼容模式 ”选项,则可能会出现此错误。

我没有select的选项,它再次运作完美。 右键单击VS或可执行文件的快捷方式,select属性 ,然后select兼容性

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

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

如果你的debugging进程包含多个appdomains,并且程序集被加载到两个程序中,并且其中一个正在加载一个旧的副本(通常是像插件一样dynamic加载的),那么断点可以显示为稳定的,但是应该到达断点的线程在与旧的程序集appdomain,并没有命中。 您可以在模块窗口中看到装入的组件和path。

首先,我尝试从命令行;

从命令行删除临时文件没有工作。

C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files> rd / s root

当在工具 – >选项 – >debugging – >常规中禁用“只启用我的代码”选项时

问题解决了我。 这是一个WCF应用程序,试图debugging一个ashx页面。 http://blogs.msdn.com/b/zainnab/archive/2010/10/25/understanding-just-my-code.aspx

检查解决scheme中是否有多个具有该名称的文件。

我从一个从别人手里接过的项目上得到了这个。 在Controller.cs中的断点列表中充满了行号,有些是活动的,有些没有。 我发现这个问题,并尝试了几个选项,但是当我双击断点时,他们把我带到解决scheme中的不同项目。 因为这些文件被称为相同的,他们似乎是相同的,但他们不是。 答案当然是忽略这个警告,因为如果你加载其他文件,它们将变成活动的。

当您尝试debugging时,请确保您没有处于释放模式。

在我的情况下,问题是在项目属性>> Web下未启用ASP.NETdebugging

这发生在我身上,因为我在解决scheme中还有其他项目没有构build。 卸载那些有问题的项目后(右键单击解决scheme资源pipe理器中的项目 – >卸载项目),重build解决scheme并再次运行 – 断点被击中!

我之前一直在搞我的csproj文件。 因此,在项目属性(VS 2013)> Web选项卡>服务器部分> [下拉列表]中select了“以前的本地IIS”时select了“IIS Express”。 一旦我改正了我以前的设置,断点工作。

有些情况下重新编译和重build不能解决这个问题。 其他可能的解决scheme之一可能是从解决scheme资源pipe理器中删除具有断点的源文件并再次添加它(例如通过从文件夹中拖放)。