源文件与构建模块时的源文件不同


103

这真让我抓狂。

我有一个较大的项目正在尝试修改。我之前注意到,在键入时DbCommand,visual studio并未对其进行任何语法高亮显示,并且我正在使用System.Data.Common

即使未突出显示任何内容,该项目在我的浏览器中似乎运行正常。因此,我决定运行调试器,以查看事情是否真的如预期的那样正常工作。

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

我清理了解决方案并对其进行了多次重建,删除了tmp文件,并按照此处的所有说明进行操作。获取“源文件与构建模块时的源文件不同”。,重新启动了Web服务器,但仍然可以告诉我源文件在明显不同时有所不同。

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

  • 我刚刚编写的源代码与二进制代码有什么不同?
  • 有什么办法可以使视觉工作室产生某种感觉,还是我只是想念一些东西?

抱歉,那有点多。简短版本:编译程序,然后尝试对其进行调试,Visual Studio告诉我我的源文件(我刚刚编译的)与我刚刚构建的模块不同。我只想知道为什么会这样
沮丧的

Answers:


111

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

我找到这个的原因是:

  1. 我检查了“仅构建启动项目和对Run的依赖项”(工具->选项->项目和解决方案->生成并运行)
  2. 在配置管理器中,我的启动项目未选中“构建”

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


7
+1,以获取配置管理器提示。我一直在努力解决一个小时,仅此而已。
尼克·萨拉比

我在TFS中有一个解决方案的多个分支。跨所有已检出分支删除bin和obj目录似乎可以清除所有问题。
备用字节

在我的情况,我改变了solution platformsAny CPUMixed Platform错误!我将其更改回Any CPU并且可以再次工作。
vaheeds,2013年

谢谢,“解决方案”>“属性”>“配置属性”>“配置”,我的控制台应用程序(在同一sln中运行Web应用程序的测试)未选中。
emery.noel

23

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

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


1
您没有直接提及,但是“卸载项目”(再次重新加载)对我有用。
javaLover

这对我有用:>这些都不起作用,我最终尝试的是右键单击该项目并分别重建每个项目。那会更新.dlls和.pdb文件,以便我可以调试。
Khachatur

卸载项目(再次重新加载)并将最新的比特发布到Web服务器(IIS)对我有用。
杰森·唐

5

跟着这些步骤

  1. 只需从生成DLL的项目中删除bin目录。
  2. 重新生成项目。
  3. 从引用DLL的项目中删除引用。
  4. 再次包括参考。
  5. 请享用。

4

除了这些答案之外,由于路径错误,在用旧的DLL替换新的DLL时,我遇到了相同的问题。如果仍然出现此错误,则可能不会为DLL引用错误的路径。转到IIS管理器,然后单击使用您的DLL的网站。在右侧窗口中,单击“高级设置”,然后转到“文件资源管理器”上“ Physical Path”文件夹的路径,并确保您正在使用此文件夹替换DLL。


4

您需要检查的一些事项:

您是否仔细检查过您的项目参考?

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

替代文字
(来源:msdn.com

右键单击并关闭/退出。您可能有多个。您现在可以调试更改吗?

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

编译实际上成功了吗?我知道我已经点击了“出现错误,是否仍然要继续?” 几次都没意识到。


编译确实成功。对于Visual Studio,我有点菜鸟。如何检查是否正在运行调试版本或发行版?
frustratedcoder

1
@frustrated-我只是想消除明显​​的现象。要检查您是要发布还是要调试,请检查工具栏上“调试”图标旁边的下拉菜单。这将是“调试”或“发布”。
克里斯·弗雷德(ChrisF)

谢谢。它确实说调试。那应该是吗?
frustratedcoder

@frustrated-这是一个好的开始;)。您可以“调试”发布代码,但是它没有用-此处无关紧要。这确实意味着您正在(或至少应该)构建并运行调试二进制文件。我将不得不考虑一些其他问题-在没有真正看到问题的情况下,很难诊断。
克里斯·

我认为“没有真正看到问题就很难诊断”。我确实感谢您的帮助
frustratedcoder 2010年

3

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

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

如果以前收到源文件不匹配错误,则Visual Studio可能已将文件名添加到黑名单中。检查您的解决方案属性。在对话框的左侧选择“公共属性->调试源文件”。如果您的Web服务源文件出现在“请勿查找这些源文件”字段中,请删除它们。


2

我刚遇到这个问题。

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

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

建立解决方案。

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


我认为删除.pdb文件是这里的关键。这发生在我身上,因为我从另一个分支复制了过时的.pdb文件。
Danzomida 2014年

1

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

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

2)开始调试

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

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


1

我的解决方案:

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

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

将项目切换为在新解决方案的输出目录中进行搜索对我来说已解决了此问题。



1

我有同样的问题。为了解决这个问题,我使用“发布模式”在VS2013中进行调试。这对我来说已经足够了,因为我正在使用节点js \ c ++插件。


1

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

重新加载项目。

固定



1

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

因此,每当我更改第一个项目的代码并重新构建它时,它都会更新debug文件夹中的dll,但是调用项目指向的是release文件夹,这给我带来了错误,“源文件与模块时的源文件不同。被建。”

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


0

解决方案:-问题是:-如果解决方案中的某些项目引用了其他项目,则有时某些项目的dll不会自动更新,每当您构建解决方案时,某些项目将具有以前的生成dll,而不是最新的dll

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


0

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

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


0

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

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


0

我遇到了同样的问题,在这里发布的其他答案中,我遵循了大多数指导,对我来说似乎没有任何效果。

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

这似乎已经解决了问题,现在已经达到了预期的断点。我认为这样做以及删除bin和obj文件夹有助于解决我的问题。

祝好运!


0

我知道这是一个老问题,但是我也遇到了同样的问题,因此想在这里发帖,以免对其他人有所帮助。我有一台新计算机,IT部门将我的旧计算机与新计算机合并。设置TFS时,我将与以前使用的本地路径映射到其他内部驱动器。硬盘驱动器上的合并数据仍然存在旧路径,因此我仍然可以构建和运行。我的IIS路径也指向旧目录。将IIS更新到正确的路径后,就可以调试了。我还删除了旧目录,以防万一。


0

我也经历过。我只是打开项目上的obj文件夹,然后打开调试文件夹,删除.pdb文件,仅此而已。


0

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

我正在从另一个项目的.dll调试方法,其中Visual Studio很有帮助地加载了源代码,因为.dll是在同一台计算机上构建的,并且它知道源代码的路径。显然,更改这样的文件不会做任何事情,除非您重建引用的项目。



0

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

  • 重新启动Visual Studio。

0

调试->启动无需调试。

这个选项对我有用。希望这可以帮助!


0

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

如果不是这种情况:

确保以保存.lib文件的模式编译Visual Studio:

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

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

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

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

0

就我而言,@ Eliott的答案不起作用。为了解决此问题,我使用了我的缺陷文件从项目中排除/包含,还清理重建了解决方案。

完成这些操作后,将还原上次修改的文件和调试器。

希望对您有所帮助。


0

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

当我更改文件并重建时,很多时间都可以修复它。我知道这听起来很愚蠢,但是我只是想调试一些代码,以查看为什么一段时间以来没有做过奇怪的事情,我在此页面上尝试了十几种方法,但仅通过更改即可解决文件..

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.