VS2013运行旧代码;干净+重建是不够的;删除 bin + obj 文件夹后,第一次重建失败,但第二次重建成功



原帖

我正在建立一个ASP。.NET应用程序采用Visual Studio 2013 Premium为。NET框架4.5版,在调试过程中使用IIS Express。现在我遇到了一个以前在其他项目中发生过的问题(非常非常罕见),但在这个项目中却非常频繁地发生:

我的代码中的更改经常不能正确编译,因此在IIS中启动了较旧版本的程序。当我在一行代码中得到NullReferenceException时,我第一次注意到这一点,然后在它周围添加了null的检查,然后再次得到相同的错误,刚才在检查发生的行中(这是之前发生异常的行号)。另一个症状是由于缺少符号(我认为是由于代码版本的差异)而没有击中断点。

现在我在这里和MSDN上读了关于这个问题的各种帖子,似乎很多人都有这个问题,没有人有一个适合每个人的解决方案。

当我遇到这个问题时,做一个干净的/重建根本不起作用,但通常删除bin和obj文件夹起了作用。但是现在发生的事情如下:

开始调试过程(F5)后,我可以看到我的断点没有命中,所以我停止它,删除bin/obj文件夹和重建所有。这确实工作,总是失败的许多错误说,一个命名空间找不到(即使智能感知建议它在那里,它确实存在)和程序集(它将提供命名空间)丢失(它确实是在启动项目的最终输出文件夹;但它是在自己的项目bin文件夹中创建的…)。然后我再次重建所有,它将神奇地工作。计划的下一个开始,一切都如我所愿。但在那之后,我已经在第二次或第三次重启产生的问题再次(没有断点,旧代码),我可以重新开始删除文件夹。我必须补充一点,这种行为始于上周,此后变得越来越频繁。它并不总是在我必须在每二次尝试后删除文件夹的时候。

这一切当然是无法忍受的,因为在这种情况下是不可能工作的。但我不知道该怎么办。我已经(在其他人中)通过这个MSDN线程和这个SO问题,但似乎没有什么对我有用。

你有其他的建议吗?会不会是什么地方出了问题导致了这种行为?特别是第一次重建没有,但第二次确实工作的部分让我感到困惑,感觉好像我做错了什么。 编辑:我现在测试了另一个场景:在第一次重建之后,我得到了上面关于丢失的程序集的错误。然后我真的删除了对该程序集的引用,尽管如此,第二次重建现在仍然没有错误!这怎么可能呢?

Edit2:因此,作为总结,每二次我尝试运行程序与我希望击中的断点,符号不会被加载,我必须删除bin/obj文件夹。然后我必须重建两次,在第二次它工作后,开始并击中断点。但在此之后的下一次,它不会再遇到断点(即使我不改变代码本身的任何内容!),我必须重新开始。

<标题>

更新我现在尝试启动VS作为管理员,并仔细检查引用是项目引用。在批量清理整个解决方案后,它将启动,但随后向我显示IE中DataAccess项目的缺失组装异常。然后我删除了bin/obj文件夹并重新构建了项目一次。现在我得到(像往常一样)以下错误:

类型或名称空间'Business'在名称空间'MyNamespace'中不存在(您是否缺少程序集引用?)

无法解析此引用。找不到程序集"业务,版本=1.0.0.0,区域性=中性,处理器体系结构=MSIL"。检查以确保程序集存在于磁盘上。如果你的代码需要这个引用,你可能会得到编译错误。

问题是,Business.dll程序集位于MySolutionBusinessbinDebug文件夹以及最终的MySolutionFrontendbin文件夹中,它绝对是我刚刚构建的版本。那么为什么编译器会报错呢?感觉就像有一些错误的构建顺序,但这不应该是情况下,如果我纯粹使用项目引用,应该吗?

现在,像往常一样,第二次重建工作得很好,之后我可以击中我的断点一次。然后我在断点后的代码中添加了一个简单的int i = 0;行,并重新启动了程序,它再次告诉我断点不会被击中,符号也不会被加载。然后选中Debug -> Windows -> Modules查看

无法找到或打开PDB文件。

BusinessDataAccess项目,而昨天我得到了

PDB与image不匹配。

但是当右键单击Modules中的Business项目并选择Load symbols时,它会立即提示我进入project where a*的objDebug文件夹。Pdb '文件驻留在构建时创建的(通过时间戳确认)。选择此文件生成

在此文件夹中没有找到匹配的符号文件。

但是我刚刚点击了那个文件,所以"匹配"部分一定有问题,对吗?你还有什么别的主意吗,我完全不知道了。

<标题>更新2 h1> Visual Studio 2013更新到Update 3后,在删除bin/obj文件夹后执行第一个Rebuild All时,我得到了一个额外的编译器警告:

类型为"mynamespaces . business . providers"。BusinessProvider'存在于'MySolutionPathStartupProjectbinBusiness.dll'和'MySolutionPathBusinessbinDebugBusiness.dll'中。

我想知道是否/为什么这是一个问题,因为它是VS本身,必须复制Business.dll到StartupProject的bin文件夹。这能不能指向值得研究的东西?

在尝试了我发现的关于这个或类似问题的所有内容后,最后唯一帮助我的是在本地删除整个解决方案,并再次从TFS进行干净的检查。之后,它又像预期的那样工作了,我仍然不知道是什么原因造成的,因为我之前甚至签入过,因此我删除的版本应该与我签出的版本相同。

我只是有类似的问题(与Windows窗体项目),事实证明,我改变的代码是在一个事件处理程序,它已经抛出了设计器文件,无论出于何种原因。如果添加的代码是正确的,项目将会编译,但它当然不会被击中。仍然令我困惑的是,我的gridview是如何在没有这个事件的情况下排序的,但我记得当我写它的时候,我在想"这应该只是工作而不需要扔代码",所以也许在某个地方,我不知不觉地纠正了这个问题。无论如何,我希望这对大家有所帮助。

  1. 关闭解决方案。2.删除项目文件夹中的bin和obj文件夹。3.在visual studio菜单>build>Cleansolution中打开解决方案,构建应用程序。运行应用程序并验证更改。如果您仍然看到相同的问题,请在UI中进行另一个小更改并重新构建应用程序。

最新更新