【问题标题】:the source file is different from when the module was built源文件与构建模块时不同
【发布时间】:2011-03-06 11:14:57
【问题描述】:

这快把我逼疯了。

我正在尝试修改一个相当大的项目。我之前注意到,当我输入DbCommand 时,Visual Studio 没有对其进行任何语法突出显示,而我正在使用 System.Data.Common

即使没有突出显示,该项目似乎在我的浏览器中运行良好。所以我决定运行调试器,看看事情是否真的像他们应该的那样工作。

每次调用未突出显示的类时,我都会收到"the source file is different from when the module was built" 消息。

我清理了解决方案并重建了几次,删除了 tmp 文件,按照这里的所有指示Getting "The source file is different from when the module was built.",重新启动了 Web 服务器,但它仍然告诉我源文件不同,而它们显然不是。

因此,我无法测试我今天编写的任何代码。

  • 当我刚刚编译时,源代码与二进制文件有何不同 它?
  • 有什么方法可以让视觉工作室有一些感觉,或者我 我只是错过了什么?

【问题讨论】:

  • 对不起,如果这有点多。简短版本:我编译我的程序,然后尝试调试它,Visual Studio 告诉我我的源文件(我刚刚编译的)与我刚刚构建的模块不同。我只是想知道它为什么这么认为

标签: c# visual-studio-2008


【解决方案1】:

您需要检查的一些事项:

您是否仔细检查了您的项目参考资料?

是否有一个 Visual Studio 启动的 Web 服务器仍在运行?检查系统托盘并查找带有 cog 图标的页面(您可能有多个):


(来源:msdn.com

右键单击并关闭/退出它。你可能有不止一个。您现在可以调试您的更改吗?

您是否正在运行调试版本但只构建了发布版本(反之亦然)?

编译真的成功了吗?我知道我已经点击了“出现错误,您要继续吗?”在不知不觉中发了几次信息。

【讨论】:

  • 编译成功。谈到 Visual Studio,我有点菜鸟。如何查看我运行的是调试版还是发行版?
  • @frustrated - 我只是想消除显而易见的问题。要检查您是处于发布还是调试状态,请检查工具栏上“调试”图标旁边的下拉菜单。它将是“调试”或“发布”。
  • 谢谢。它确实说调试。应该是这样吗?
  • @frustrated - 这是一个好的开始;)。您可以“调试”发布代码,但它没有那么有用 - 但这与这里无关。这确实意味着您正在(或至少应该)构建和运行调试二进制文件。我得再想一想——在没有真正看到问题的情况下,诊断起来有点困难。
  • “没有真正看到问题,它有点难以诊断”我想这么多。不过,我确实很感谢您的帮助
【解决方案2】:

我只是遇到了同样的问题,我的项目都在同一个解决方案中,所以他们使用项目到项目的引用,所以当一个更改时,其他的应该已经更新。然而事实并非如此,我尝试构建、重建、关闭 VS2010,从我们的源代码管理中提取一个新副本。这些都不起作用,我最终尝试的是右键单击项目并单独重建每个项目。这更新了 .dlls 和 .pdb 文件,这样我就可以调试了。

这里的问题是您的 dll 和/或您的 pdb 文件不同步。

【讨论】:

  • 您没有直接提及,但是“卸载项目”(再次重新加载)对我有用,谢谢。
  • 这对我有用: > 这些都不起作用,我最终尝试的是右键单击项目并单独重建每个项目。这更新了 .dlls 和 .pdb 文件,这样我就可以调试了。
  • 卸载项目(再次重新加载)并将最新位发布到 Web 服务器 (IIS) 对我有用。
  • 当我复制粘贴 program.cs 而我猜模块和项目不同步时,这个问题发生在我身上。我在解决方案资源管理器中右键单击项目名称并清理项目。然后右键单击并构建它。然后工作正常。如果有人对我的场景给出明确的解释,将不胜感激。
【解决方案3】:

我在运行控制台应用程序时遇到了这个问题,其中不同的源是具有入口点的源(静态 void Main)。删除 bin 和 obj 目录并进行完全重建似乎可以纠正此问题,但每次我更改代码时,它都会再次过时。

我找到的原因是:

  1. 我已选中“仅在运行时构建启动项目和依赖项”(工具 -> 选项 -> 项目和解决方案 -> 构建和运行)
  2. 在配置管理器中,我的启动项目没有选中“构建”

(对于#2 -> 可通过“调试/发布”下拉列表下的工具栏访问。)

【讨论】:

  • +1 配置管理器提示。我一直在尝试解决这个问题一个小时,就是这样。
  • 我在 TFS 中有多个解决方案分支。删除所有签出分支中的 bin 和 obj 目录似乎可以解决问题。
  • 就我而言,我错误地将solution platformsAny CPU 更改为Mixed Platform!我把它改回Any CPU,它又可以工作了。
  • 谢谢,解决方案 > 属性 > 配置属性 > 配置,我的控制台应用程序(在同一个 sln 中为 Web 应用程序运行测试)未选中。
【解决方案4】:

按照这些步骤进行

  1. 只需从生成DLL的项目中删除bin目录即可。
  2. 重新构建项目。
  3. 从项目中删除引用 DLL 的引用。
  4. 再次包含引用。
  5. 享受吧。

【讨论】:

    【解决方案5】:

    解决方案:- 问题是:- 如果您在解决方案中的某些项目,请参考其他一些项目, 然后有时某些项目的 dll 不会自动更新,每当您构建解决方案时, 有些项目会有以前的构建 dll,而不是最新的 dll

    您必须手动将最新构建项目的 dll 复制到引用的项目中

    【讨论】:

      【解决方案6】:

      对于 Web 服务,问题可能是由使用 Visual Studio 的“在浏览器中查看”命令引起的。这会将服务的 DLL 和 PDB 文件放在 bin 和 obj 文件夹中。从客户端进入 Web 服务时,Visual Studio 以某种方式使用 bin(或 obj)文件夹中的 PDB,但它使用项目的输出构建文件夹中的 DLL。有几种解决方法:

      1. 尝试删除 Web 服务 bin 和 obj 文件中的 DLL 和 PDB 文件。
      2. 尝试在 Visual Studio 中单击“在浏览器中查看”。

      如果您之前遇到源文件不匹配错误,Visual Studio 可能已将该文件名添加到黑名单中。检查您的解决方案属性。选择对话框左侧的“Common Properties -> Debug Source Files”。如果您的 Web 服务源文件出现在“不查找这些源文件”字段中,请将其删除。

      【讨论】:

        【解决方案7】:

        我使用的是 Visual Studio 2013,并且我有一个受源代码控制的现有项目。
        我已经从源代码控制下载了一个新副本到一个新目录。
        在对新副本进行更改后,在构建时我收到了有问题的错误。

        我的解决方案:
        1) 打开Documents\IISExpress\config\applicationhost.config
        2) 将virtualDirectory 节点与目录更新到新副本并保存。

        【讨论】:

          【解决方案8】:

          这就是我在 Visual Studio 2010 中解决问题的方法:

          1) 将“解决方案配置”选项从“调试”更改为“发布”

          2) 开始调试

          3) 停止调试并将“解决方案配置”选项切换回“调试”

          这对我有用。第 3 步是可选的 - 当我将其更改为“发布”时它工作正常,但我想将其更改回来。

          【讨论】:

            【解决方案9】:

            我的解决方案:

            我已将来自不同解决方案的现有项目包含在新解决方案文件中。

            我没有注意到重建现有项目时,它会将最终输出放入新解决方案的输出目录中。我定义了一个链接器路径来查看 OLD 解决方案的输出目录。

            将我的项目切换为在新解决方案的输出目录中搜索为我解决了这个问题。

            【讨论】:

              【解决方案10】:

              我刚遇到这个问题。

              我尝试了以上所有方法,但只有这个有效:

              • 删除解决方案的 .pdb 文件。
              • 删除有问题的 .obj 文件(用于报告不同步的文件)

              构建解决方案。

              这为我解决了所有构建的问题。

              【讨论】:

              • 我认为删除 .pdb 文件是这里的关键。这发生在我身上是因为我从另一个分支复制了陈旧的 .pdb 文件。
              【解决方案11】:

              我的问题是我在项目中有一个 web 服务,我更改了构建路径。

              恢复默认构建路径解决了我的问题。

              【讨论】:

                【解决方案12】:

                我遇到了同样的问题,我遵循了此处发布的其他答案中的大部分指导,但似乎对我没有任何用处。

                我最终打开了 IIS 并为我的 Web 应用程序回收了应用程序池。我有 IIS 版本 8.5.9600,我右键单击我的 Web 应用程序,然后:部署 > 回收 > 回收应用程序池 > 确定。

                这似乎已经修复了它,断点现在按预期命中。我认为这样做以及删除 bin 和 obj 文件夹对我的情况有所帮助。

                祝你好运!

                【讨论】:

                  【解决方案13】:

                  我遇到了这个问题,结果证明我将控制台应用程序作为 Windows 应用程序运行。将输出类型切换回控制台解决了这个问题。

                  【讨论】:

                    【解决方案14】:

                    我遇到了同样的问题。为了修复它,我使用“发布模式”在 VS2013 中进行调试。这对我来说就足够了,因为我正在使用节点 js\c++ 插件。

                    【讨论】:

                      【解决方案15】:

                      我知道这是一个老问题,但我也遇到了同样的问题,想在这里发帖,以防它帮助别人。我有一台新电脑,IT 部门将我的旧电脑与新电脑合并。当我设置 TFS 时,我将一个不同于我之前使用的本地路径映射到一个额外的内部驱动器。旧路径仍然存在于我硬盘上的合并数据中,因此我仍然可以构建和运行。我的 IIS 路径也指向旧目录。一旦我将 IIS 更新到正确的路径,我就可以正常调试了。我还删除了旧目录。

                      【讨论】:

                        【解决方案16】:

                        我也经历过。我只是打开项目上的obj文件夹,然后打开调试文件夹删除.pdb文件就可以了。

                        【讨论】:

                          【解决方案17】:

                          如果您尝试对不属于项目的源文件进行更改,也会发生此错误。

                          我正在从我的另一个项目的 .dll 调试一个方法,Visual Studio 在其中加载了源代码,因为 .dll 是在同一台机器上构建的,并且它知道源代码的路径。显然,除非您重建引用的项目,否则更改此类文件不会有任何作用。

                          【讨论】:

                            【解决方案18】:
                            1. 删除所有断点。
                            2. 重建。
                            3. 完成

                            【讨论】:

                              【解决方案19】:

                              卸载包含导致错误的文件的项目。

                              重新加载项目。

                              固定

                              【讨论】:

                                【解决方案20】:

                                在 Visual Studio 2015 中,使用 C++ 为我解决了 the source file is different from when the module was built 问题是

                                • 重新启动 Visual Studio。

                                【讨论】:

                                  【解决方案21】:

                                  Debug-> 不调试就启动。

                                  这个选项对我有用。希望这会有所帮助!

                                  【讨论】:

                                    【解决方案22】:

                                    在 Visual Studio 2017 中删除隐藏的 .vs 文件夹为我解决了这个问题。

                                    【讨论】:

                                      【解决方案23】:

                                      检查您在 Matlab 中使用 mex() 指向的位置是否正确(包含修改为您在 Visual Studio 中编译库的最后日期的 lib 和 obj 文件)。

                                      如果不是这样:

                                      确保您在保存 .lib 文件的模式下编译 Visual Studio:

                                      1. 属性 -> 配置属性 -> 常规 -> 配置类型 -> 静态库

                                      2. 属性 -> 配置属性 -> 常规 -> 目标扩展=.lib(而不是 exe)

                                      确保输出和中间目录与Matlab中的目录匹配

                                      1. 属性 -> 配置属性 -> 常规 -> 输出目录
                                      2. 属性 -> 配置属性 -> 常规 -> 中间目录

                                      【讨论】:

                                        【解决方案24】:

                                        我的问题是我的解决方案中有两个项目。第二个是用于调用第一个的测试项目。我从 bin 文件夹的发布文件夹中选择了引用的路径。

                                        所以每当我对第一个项目的代码进行更改并重新构建它时,它会更新调试文件夹中的 dll,但调用项目指向发布文件夹,给我一个错误,“源文件不同于构建模块的时间。”

                                        一旦我删除了对发布文件夹中主项目 dll 的引用并将其设置为调试文件夹中的 dll,问题就消失了。

                                        【讨论】:

                                          【解决方案25】:

                                          就我而言,@Eliott 的回答不起作用。 为了解决这个问题,我有 Exclude/Include From Project 我的缺陷文件,以及 CleanRebuild 解决方案。

                                          在这些操作之后,我的最后修改的文件和调试器被恢复。

                                          希望对你有所帮助。

                                          【讨论】:

                                            【解决方案26】:

                                            有时使用 Visual Studio 进行调试但应用程序由 IIS 提供服务时,我会遇到此问题。 (由于一些复杂的原因,我们必须以这种形式进行开发,这与原始开发人员如何设置此项目有关。)

                                            当我更改文件并重建时,很多时候都会修复它。我知道这听起来很傻,但我只是想调试一些代码,看看为什么我有一段时间没有更改它时它会做一些奇怪的事情,我从这个页面尝试了十几件事,但它只是通过更改来修复文件..

                                            【讨论】:

                                              【解决方案27】:

                                              除了这些答案之外,由于路径错误,我在用旧的 DLL 替换新的 DLL 时遇到了同样的问题。如果您仍然收到此错误,您可能没有引用错误的 DLL 路径。转到 IIS 管理器并单击使用您的 DLL 的网站。在右侧窗口中单击高级设置并转到文件资源管理器上的物理路径文件夹的路径,并确保您正在使用此文件夹来替换您的 DLL。

                                              【讨论】:

                                                猜你喜欢
                                                • 1970-01-01
                                                • 1970-01-01
                                                • 1970-01-01
                                                • 1970-01-01
                                                • 2012-11-16
                                                • 1970-01-01
                                                • 2014-08-03
                                                • 2017-11-05
                                                相关资源
                                                最近更新 更多