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

时间:2010-03-18 10:01:23

标签: .net visual-studio debugging

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

该消息究竟是什么意思?什么原始版本?如果我刚刚打开解决方案并且没有对代码进行任何更改,那么如何才能有“原始版本”?

62 个答案:

答案 0 :(得分:250)

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

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

答案 1 :(得分:120)

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

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

答案 2 :(得分:40)

对我而言,这是在开展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正在使用那个。

答案 3 :(得分:36)

你有没有这样做过?

Would you like to continue and run the last successful build?

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

尝试更改此值:

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

答案 4 :(得分:28)

转到

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

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

答案 5 :(得分:27)

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

screenshot of menu

答案 6 :(得分:24)

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

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

答案 7 :(得分:24)

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

如果您运行的Visual Studio实例不止一个,则只需关闭运行解决方案的实例即可。

答案 8 :(得分:19)

从Visual Studio 2017 15.3.1到15.3.5开始,出现了解决此问题的新方法。如果您使用的是EditorConfigBannana选项会导致出现这些症状。 VS团队已经复制了这个和says they are working on it

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

编辑:从VS 15.5开始,这应该是固定的。

答案 9 :(得分:8)

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

答案 10 :(得分:7)

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

中列出
  • 解决方案资源管理器
    • 右键单击解决方案
      • 属性
        • 共同属性
          • 调试源文件
            • "不要查找这些源文件"。

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

答案 11 :(得分:6)

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

int a=0;

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

答案 12 :(得分:4)

我也遇到过这个。导致我的问题的条件:

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

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

要解决这个问题,我只是关闭并重新打开之前的预期版本,再次声明它是调试源。

答案 13 :(得分:4)

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

一旦激活器加载组件,断点就会解析(假设汇编和调试符号是最新的)。一个好看的地方是调试菜单中的模块窗口。在那里你应该寻找你的文件所属的程序集。首先检查装配是否已加载。然后,从哪里装载?然后,是加载符号文件。再次,从哪里加载符号文件?最后检查两者的版本。

答案 14 :(得分:4)

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

答案 15 :(得分:3)

我在分层架构项目的几个项目中遇到了同样的问题,问题在于配置,所选项目的构建复选框尚未检查。所以这个问题已经修复了一个项目。

对于另一个层,即使在配置中启用了构建,它也会出现同样的问题。我做了所有其他选项,比如重新启动清理项目,但没有帮助。最后,我取消选中该特定项目的构建复选框,并进行清理和重建。再次标记复选框并做了 相同。然后问题就解决了。

希望这会有所帮助..

答案 16 :(得分:3)

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

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

答案 17 :(得分:3)

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

答案 18 :(得分:3)

对我来说,解决方案隐藏在项目属性的Advanced Build Settings中: enter image description here

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

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

答案 19 :(得分:3)

转到:

  

工具>选项>调试>一般> 未选中需要来源   文件与原始版本完全匹配

答案 20 :(得分:3)

我刚刚为我重新加载,清理和重建了作品。

答案 21 :(得分:3)

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

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

答案 22 :(得分:3)

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

答案 23 :(得分:3)

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

  1. 转到bin文件夹
  2. 删除.pdb文件
  3. 重建
  4. 应该做的伎俩!

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

答案 24 :(得分:2)

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

确切地说,没有一种解决方案适合我。我重新开始,我清除IDE文件,清理构建的解决方案,从git repo中取出并重建解决方案无济于事。

我从nuget中获取了64位依赖项,一旦我使用了程序集,源代码就不再构建到最终的可执行文件中,而是构建了IDE缓存源代码。

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

这是一种痛苦,我希望它能在答案列表中找到所有人看到的。

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

答案 25 :(得分:2)

首先我从命令行尝试了;

从命令行删除临时文件确实有效。

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

当我在工具中禁用“启用我的代码”选项时 - >选项 - >调试 - >一般

问题已解决对我而言。它是一个WCF应用程序,正在尝试调试ashx页面。 http://blogs.msdn.com/b/zainnab/archive/2010/10/25/understanding-just-my-code.aspx

答案 26 :(得分:2)

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

答案 27 :(得分:2)

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

答案 28 :(得分:2)

就我而言,我正在开发一个针对模拟器进行测试的Windows CE应用程序。问题是可执行文件未部署到模拟器,因此.pdb(在开发环境中)与.exe(在模拟器中)不同步,因为新的.exe从未复制到模拟器。我不得不删除模拟器中的.exe以强制进行新部署。然后它奏效了。

答案 29 :(得分:2)

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

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

答案 30 :(得分:1)

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

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

答案 31 :(得分:1)

也许这些dll是从GAC加载的。

您可以从gac卸载dll,需要管理员权限。

gacutil -u YourDll

答案 32 :(得分:1)

我通过先删除有问题的文件来解决此问题。

编译。

由于某种原因,程序仍然运行。它不应该编译。它有错误和内容,但仍然可以运行。

我读取了有问题的文件。再次运行。它以某种方式自行修复。

答案 33 :(得分:1)

尝试调试时,请确保您未处于发布模式。

答案 34 :(得分:1)

效果很好 - 您必须取消选中“仅启用我的代码”复选框,如下图突出显示:

enter image description here

答案 35 :(得分:1)

因为构建版本已更改(很可能是您修改了源代码),所以重新编译解决方案并再次运行该应用程序,然后它将到达调试断点。

答案 36 :(得分:1)

对我有帮助的步骤(VS Community 2017,15.9.11)。

请注意,执行以下步骤后,断点将丢失。

  1. 右键单击类文件
  2. 已选择排除于 项目
  3. 右键单击项目
  4. 选择添加现有文件
  5. 导航以选择有问题的课程文件

答案 37 :(得分:1)

如果您的调试进程包含多个appdomains并且程序集被加载到两者中,并且其中一个正在加载旧副本(通常是像插件一样动态加载的东西),则断点可以显示为实心,但是应该到达断点的线程是旧的程序集的appdomain,永远不会命中。您可以在模块窗口中查看加载的程序集及其路径。

答案 38 :(得分:1)

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

我有一个项目是我从别人手中接过来的。断点列表中充满了Controller.cs中的行号,有些是活动的,有些则没有。我发现了这个问题,并尝试了一些选项,但是当我双击断点时,他们将我带到了解决方案中的不同项目。因为文件被称为相同,它们看起来是相同的,但它们不是。答案当然是忽略警告,因为如果您要加载其他文件,它们将变为活动状态。

答案 39 :(得分:0)

我在VSCode中遇到了这个问题,问题是我在编辑器中查看的文件与项目正在构建的文件的副本不同。我已经将C#库的存储库克隆到两个位置,一个在编辑器中打开,另一个正在由项目链接。如果您无法使用干净的构建工具,请检查您是否在编辑器中查看了正确的文件副本!

答案 40 :(得分:0)

使用本地IIS而不是IIS express时遇到了此问题。 IIS中的文件源确实与Visual Studio中的文件源匹配,但是,我不得不在IIS中回收应用程序池,以使其使用新构建的DLL。

答案 41 :(得分:0)

在我的情况下,我为静态类中的静态约束字符串字段分配了大约120kb base64值。此后发生此问题。我尝试了很多解决方案,但是直到我删除了此繁重的作业后,问题才得以解决。

我的环境: MS VS社区2017 版本15.9.16

答案 42 :(得分:0)

尽管有所有答案,但我的问题实际上与这里提到的不同!

确保您的属性 -> 构建选项卡 -> 输出路径指向与您选择的构建配置的解决方案中的所有其他项目相同的位置!

enter image description here

如果您的启动项目将其可执行文件发送到与您尝试调试的 dll 不同的文件夹中,尽管您的构建和 Visual Studio 工作正常,但您可能会遇到问题。

答案 43 :(得分:0)

有时您只需要将解决方案配置从“发布”更改为“调试”。enter image description here

答案 44 :(得分:0)

我的问题有点愚蠢。我有两个项目副本,并且在Visual Studio中混合了文件。

假设您有projectXprojectY。这些项目都包含myFile.cs。我打开了projectX并编辑了myFile.cs。但是此myFile.cs属于projectY。 (有可能在Visual Studio中打开来自不同项目的文件),因此在这种情况下,如警告所述,源代码将不同于原始代码。

答案 45 :(得分:0)

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

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

答案 46 :(得分:0)

我已经尝试了建议的解决方案,但是没有用。

如果您有多个项目,请将要调试的项目作为启动项目。

enter image description here

答案 47 :(得分:0)

我遇到了这个问题,这是因为我们的DevOps团队要求执行Azure云设置。在开发时,只需将其放在Web.config中即可。

<httpRuntime maxRequestLength="102400" />

    <!--TODO #5 comment out for IIS Express fcnMode goes with httpRunTime above in other environment just in DEV -->
    <!--fcnMode="Disabled"/>-->

答案 48 :(得分:0)

将项目从netcoreapp2.0升级到netcoreapp2.2之后,我遇到了这个问题。

我只是通过编辑TargetFramework文件中的.csproj条目来完成此操作的,而忽略了也要进行更改launch.json

"program": "${workspaceFolder}/src/MyProject/bin/Debug/netcoreapp2.0/MyProject.dll"

这意味着VS Code始终在加载项目的旧2.0版本。我只是在删除/bin/obj中的所有内容后才发现它的,然后直到我在上面的路径中发现2.0时它才完全运行。

答案 49 :(得分:0)

就我而言,其他任何建议均无效,但是重新克隆我的存储库使此问题消失了。

答案 50 :(得分:0)

故意破坏构建,这意味着在调试时在项目中添加一些不同步的任意文本。尝试调试并接收异常。现在修复异常并调试项目。

答案 51 :(得分:0)

对于VS Code用户:

如果您在尝试调试ASP .NET Core应用程序时遇到此问题,请确保在tasks.json中定义的生成任务以及您在 Debug Console 窗格中看到的输出,运行成功。

launch.json中定义的调试配置引用了此任务,由于某种原因(至少在某些情况下),即使构建任务失败,并且由于构建任务失败,调试配置仍将继续执行定义的二进制文件,该二进制文件将成为最后一个成功构建的程序集。

答案 52 :(得分:0)

答案 53 :(得分:0)

对我来说;我的网站在默认网站http://localhost/myapp/)下的IIS应用程序中运行,IIS应用程序的映射指向与我正在处理的源代码不同的磁盘路径。

解决;将IIS应用程序重新映射到与您正在构建的源代码相同的路径。

(如果从磁盘上的不同位置运行同一应用程序的多个版本,则会发生这种情况)

答案 54 :(得分:0)

有些情况下,重新编译和重建无助于解决此问题。 其他一个可能的解决方案可能是从解决方案资源管理器中删除带有断点的源文件并再次添加(例如通过从文件夹中拖放)。

答案 55 :(得分:0)

我之前一直在搞乱我的csproj文件。所以在项目属性下(VS 2013)&gt;网络标签&gt; <服务器部分> [下拉],当我选择“本地IIS”时,我选择了“IIS Express”。一旦我将设置更正为之前的设置,断点就会起作用。

答案 56 :(得分:0)

它发生在我身上,因为我在解决方案中还有其他项目没有建立。 卸载有问题的项目后(右键单击解决方案资源管理器中的项目 - &gt;卸载项目),重新构建解决方案并再次运行 - 断点被击中!

答案 57 :(得分:0)

在我的情况下,我忘了在头文件中包含“stdafx.h”,我在这里声明了一个模板函数。

答案 58 :(得分:0)

在我的情况下,问题是在项目属性&gt;&gt; Web

下未启用ASP.NET调试

答案 59 :(得分:-1)

我最近遇到了这种情况,在我的情况下,我将问题追溯到测试时我正在做的事情:更改系统时间。我并不是说每个人都是这种情况,但我想我已经提到它,因为它还没有被提及过。看来如果你开始在调试版本之间移动时钟,那么它可能会对各种文件的创建顺序感到非常困惑 - 我只能假设它使用文件修改日期来确定源代码是否有效,并且它需要重新编译的二进制文件。

还可以选择重新保存web.config以缩短其修改时间。

答案 60 :(得分:-4)

我只是重新启动计算机,这对我来说非常有用。

答案 61 :(得分:-7)

code causing the "The source code is different" error

我发现断点位于无法断开的行上时发生错误。我没有显示工具提示,以便在没有错误之后直接显示该行。