Visual Studio警告具有不同内容的文件副本 >当我在VisualStudio中调试我的C++项目时,弹出一个警告对话框,它告诉我: A copy of datum.h was found in c:/users/brad/desktop/source/binary/datum.h, but the current source code is different from the version built into c:/users/brad/desktop/source/binary/datum.h.

Visual Studio警告具有不同内容的文件副本 >当我在VisualStudio中调试我的C++项目时,弹出一个警告对话框,它告诉我: A copy of datum.h was found in c:/users/brad/desktop/source/binary/datum.h, but the current source code is different from the version built into c:/users/brad/desktop/source/binary/datum.h.,c++,visual-studio,C++,Visual Studio,我很难理解这是什么,甚至试图告诉我,更不用说如何修复它。起初,我想这可能是在抱怨我无意中复制了目录中的一个文件,我检查了一下,没有发现类似的内容,这让我非常困惑。我还尝试从解决方案中排除该文件,然后再次添加它,这也没有解决问题 这个警告似乎并没有阻碍我的项目的发展,但我想警告的存在是有原因的,所以如果有人知道出了什么问题,任何建议都将不胜感激。据我所知,我没有更改任何内容以使消息出现,它只是在我调试解决方案时弹出一次,此后一直出现 此外,与我的解决方案中的其他头文件有关的同一警告的更多副本也开始

我很难理解这是什么,甚至试图告诉我,更不用说如何修复它。起初,我想这可能是在抱怨我无意中复制了目录中的一个文件,我检查了一下,没有发现类似的内容,这让我非常困惑。我还尝试从解决方案中排除该文件,然后再次添加它,这也没有解决问题

这个警告似乎并没有阻碍我的项目的发展,但我想警告的存在是有原因的,所以如果有人知道出了什么问题,任何建议都将不胜感激。据我所知,我没有更改任何内容以使消息出现,它只是在我调试解决方案时弹出一次,此后一直出现


此外,与我的解决方案中的其他头文件有关的同一警告的更多副本也开始弹出(我还没有收到任何关于.cpp的文件,但这可能是巧合,因为它只持续了大约20分钟)。

您是否可能正在调试另一个可执行文件(不是实际生成的文件?)。在VisualStudio在一个目录中构建二进制文件,但随后将其复制到其他目录进行调试的场景中,这是一个常见问题。我建议您在VisualStudio中比较调试设置下的目标路径和常规设置下的输出目录


这可以解释问题,因为您实际上正在调试某些旧版本的二进制文件(不是当前构建的版本),因此出现警告,因为Visual Studio找不到该版本二进制文件的源文件版本。

请尝试从相关文件中删除断点。 当Visual Studio 2013用于调试生成中的头文件时,这对我很有用。


附加说明:清理/重建也可以工作,但这对于定期更改代码来说是痛苦的。启动调试器后启用断点只会延迟消息。

原因可能是循环标头依赖关系。datum.h可包括另一个_头.h(直接或间接),其中包括datum.h

问题在于调试器认为源文件的校验和与编译器计算并放入的校验和不同。然后,调试器将拒绝在不匹配的文件中应用断点,以防止您看到无法保证正确的数据


即使在一次干净的重建之后,我也一直在这样做。这是VS 2015。我猜可能是调试器和编译器在如何散列换行符之类的问题上存在分歧?修复方法是在调试->选项->调试->常规中关闭“要求源文件与原始版本完全匹配”

我解决了它:

  • 关闭Visual Studio中.h文件的窗口(如果打开)
  • 关闭VisualStudio
  • 从其正常位置剪切.h文件,并将其粘贴到VS不知道的临时文件夹中
  • 重新启动VS并编译。它会抱怨丢失的.h文件。很好,让那个混蛋去乞讨吧
  • 将.h文件粘贴回其原始位置
  • 编译。VS将感激地接受丢失的文件。(该死的,我讨厌微软!)
  • 这对我很有用:

    • 接近VS
    • 删除
      *.vcxproj.filters
      文件
    • 重新启动VS

    问题应该解决了。

    这对我很有效:

  • 清洁工程
  • 调试/删除所有断点:)

  • 我知道这个问题的真正原因没有得到回答。所以,对于仍在寻找的人来说,这就是。。。 此问题最常见的原因是,用于构建现有obj文件的源文件与现有obj文件不同。换句话说 对源代码进行新的修改后,未生成特定项目。解决此问题的方法是在修改后重建项目。 在我修改了静态库项目文件,但没有构建该项目的情况下,我启动了使用该静态库项目的应用程序项目。这对我有效(截至2019年3月):

  • 单击Visual Studio窗口左上角的“构建”下拉菜单
  • 选择“重建解决方案”

  • 我已经更改了文件名,现在可以使用了。

    刚刚遇到这个问题。在我的例子中,我的一个
    .h
    文件包含实现(一个带有静态方法的类),它包含在我的一个
    .cpp
    文件中,但是项目设置也告诉Visual Studio编译
    .h
    文件

    我手动编辑了
    .vcxproj
    .vcxproj.filters
    项目文件,将
    .h
    文件从
    项目组移动到
    项目组

    这对我起了作用;我再也没有看到“一份……与……不同”的弹出窗口。
    (请注意,这是在我尝试使
    正常工作时彻底失败之后。)

    如果将实现文件(*.c,*.cpp等)重命名为头文件,则会发生这种情况。 这是因为项类型仍然作为
    C/C++源文件
    ,使其作为单独的翻译单元而不是实际的标题进行编译,从而阻止Visual Studio将其作为标题包含在其他地方

    我花了很长时间才弄明白这一点

    要解决此问题,请执行以下操作:

  • 在解决方案资源管理器中右键单击头文件并选择属性

  • 选择所有配置、所有平台

  • 在“常规”下,将项目类型更改为
    C/C++标题

  • 按OK

  • 强制重新编译包含头文件的任何文件