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

时间:2014-10-07 12:23:59

标签: c# asp.net visual-studio visual-studio-2013 iis-express

原帖

我正在使用Visual Studio 2013 Premium for .NET framework 4.5版构建一个ASP.NET应用程序,在调试过程中使用IIS Express。现在我遇到了其他项目之前发生的问题(非常非常罕见),但在这个问题中经常发生:

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

现在我已经在这里和MSDN上阅读了有关此问题的所有类型的线程,似乎很多人不时都有这样的话,并且没有人能够找到适用于所有人的解决方案。

当我遇到此问题时,执行清理/重建根本不起作用,但通常删除bin 和obj 文件夹就可以了。但现在发生的事情如下:

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

所有这一切当然是难以忍受的,因为在这种情况下无法工作。但我不知道该怎么做。我通过this MSDN threadthis SO question工作过(其中包括),但似乎对我没有任何帮助。

你还有其他建议吗?在某些方面会出现什么问题会明确产生这种行为吗?特别是第一次重建没有但第二次确实有效的部分让我困惑,感觉可能会出现我做错的事情。

编辑:我现在测试了另一个场景:第一次重建后,我得到了有关丢失程序集的上述错误。然后我真的删除对该程序集的引用,尽管如此,第二次重建现在仍然没有错误!怎么会这样?

Edit2:所以作为总结,我每次第二次尝试使用我想要的断点运行程序时,符号不会被加载,我必须删除bin / obj文件夹。然后我必须重建两次,在它第二次工作后,启动并点击断点。但是在此之后的下一次,它不再会打破断点(即使我不改变代码本身的任何内容!)而且我必须重新开始。

更新

我现在尝试以管理员身份启动VS并仔细检查引用是项目引用。在批量清理整个解决方案之后,它会启动,但随后会显示IE中DataAccess项目缺少的程序集异常。然后我删除了bin / obj文件夹并重建了一次项目。现在我(像往常一样)得到以下错误:

  

类型或命名空间' Business'名称空间中不存在“MyNamespace”' (你错过了一个程序集引用吗?)

     

无法解析此引用。无法找到程序集" Business,Version = 1.0.0.0,Culture = neutral,processorArchitecture = MSIL"。检查以确保磁盘上存在程序集。如果您的代码需要此引用,则可能会出现编译错误。

问题是,程序集Business.dll位于MySolution\Business\bin\Debug文件夹以及最终MySolution\Frontend\bin文件夹中,它绝对是我刚刚构建的版本。那么为什么编译器会抱怨?感觉构建顺序有问题,但如果我纯粹使用项目引用,那不应该是这样吗,是吗?

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

  

无法找到或打开PDB文件。

对于BusinessDataAccess项目,而昨天我得到了

  

PDB与图像不匹配。

对于那些人。

但是当右键单击 Modules 中的Business项目并选择加载符号时,它会立即提示我obj\Debug { {1}} *。pdb`文件驻留在构建时创建(通过时间戳确认)。选择此文件会产生

  

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

但我只是点击了那个文件,所以匹配'一定有问题。部分,对吗?你还有什么进一步的想法,因为我完全没有这方面的知识吗?

更新2

将Visual Studio 2013更新为Update 3后,在删除bin / obj文件夹后执行第一个 Rebuild All 时,会收到额外的编译器警告:

  

类型' MyNamespace.Business.Providers.BusinessProvider'存在于' MySolutionPath \ StartupProject \ bin \ Business.dll'和' MySolutionPath \ Business \ bin \ Debug \ Business.dll'。

我想知道/为什么这是一个问题,因为VS本身必须将project where a复制到StartupProject的bin文件夹。这可能指向值得关注的东西吗?

3 个答案:

答案 0 :(得分:0)

在尝试了我发现的关于这个或类似问题的所有内容之后,最终帮助我的唯一事情是在本地删除整个解决方案并再次从TFS进行清理检查。之后它再次按预期工作,我仍然不知道是什么导致它,因为我之前检查过,因此我删除的版本应该与我签出的版本相同。

答案 1 :(得分:0)

我刚才有类似的问题(使用Windows窗体项目),结果发现我更改的代码是在一个事件处理程序中,由于某种原因,它已被抛出设计器文件。如果添加的代码是正确的,项目将编译,但它当然永远不会被击中。还有什么让我感到困惑的是我的gridview如何在没有这个事件的情况下进行排序,但我记得当我写这篇文章时,我在想“这应该只是工作而不会抛出代码”,所以也许在某个地方,我不知不觉地纠正了这个问题另一种方式。无论如何,我希望这对任何人都有帮助。

答案 2 :(得分:0)

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