问题描述

  最近因为项目需要,开发平台从VS2005切换成了VS2010,把一些老项目也转换到VS2010平台,因为是从低到高升级,微软还是做了很多兼容,基本上可以无缝切换,编译调试也基本正常,但是发现有些项目(尤其是比较大的项目),刚刚编译完毕,马上F5启动调试,发现VS2010会弹出下面的框,开始以为是自己手误,不小心改动了某个源文件导致,后来发现每次调试都提示,把"不再显示此对话框"勾上是不是就可以了呢?框是不弹了,但是实际上还是每次重新编译。



图一 "不再显示此对话框"图示

问题追踪

  1、首先,我开始以为是我安装的VS2010有什么问题,但是随便新建的VS2010的工程正常得狠,从来没有出现过这个问题。

  2、另外,从这个提示这个来看,它是说对比上一次编译来说,本地的源文件过期了(就是有改动过了),如果真的改动过了,那么这个提示是正确的,确实需要重新编译,但是,经过多次观察"输出窗口"的输出,每次重新编译,并没有发现有什么文件被重新编译,VS2010这是在忽悠人?!

  3、怒了,从一个有问题的小工程入手,一个个的排查里面的源文件,发现里面一个.h头文件实际上本地没有了,但是还留在工程的编译文件列表里面,而且该头文件没有任何文件引用它了,因此编译不会出错,把这个不存在的文件从文件列表删除了之后,这个小工程的该问题竟然就解决了。

  4、后来想想,估计是VS2010画蛇添足,编译过程如果发现不存在的文件,本应该警告提示该文件不存在了,但是可能逻辑写得有点问题,把工程标记成了过期的,导致这个框每次都弹。测试了下VS2005没有这个问题,这也难怪为什么很多从VS2005升级上来的工程都遇到了这个问题,因为一些大工程文件太多了,有些无用的文件可能本地删除了,但是忘记从工程文件里面删除了,VS2005又不提示,导致了这个问题。

解决方案

  1、一种显而易见的方案就是找到这个不存在的文件,直接从工程的文件列表里面删除即可,如果工程小,倒是可以这么干,如果工程很大,那就是体力活了。

  2、还有一个方法是开发一个工具,解析下VS2010的vcxproj工程文件,这是个XML文件,解析并不困难,把里面的文件都校验一下,把不存在的文件直接找出来。

  3、还是一个方法是我在网上(stackoverflow)看到的,通过DbgView工具来输出不存在的文件(此方法需要了解VS的devenv的配置的含义,以及一些脚本的配置方法,我不懂,因此依葫芦画瓢尝试了下,发现好用!),这种方法需要改下VS2010的IDE的配置文件:devenv.exe.config,这个文件的位置:此文件在%ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\ 或者 %ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Common7\IDE\。

  (1) 用一个文本编辑工具打开devenv.exe.config文件。

  (2) 然后在</configSections>这行的前面添加下面的配置(注:如果是VS2012或者之后的版本value的值使用Verbose)

<system.diagnostics>
  <switches>
    <add name="CPS" value="4" />
  </switches>
</system.diagnostics>

  (3) 重启下VS。

  (4) 打开DbgView,注意把Capture菜单里面的Capture Win32和Capture Events勾选上。



图二 "Capture"勾选图示

  (5) 在VS里面F5开始调试,等"此项目已经过期"的框弹出来之后,去DbgView的输出里面找类似下面的输出(如果内容很多可以直接查找is missing或者not up to date这些关键字)。直接就定位到TARGETVER.H这个文件不存在了。

[36184] Project 'D:\MyCode\Study\HelloWorld\HelloWorld.vcxproj' not up to date because build input 'D:\MYCODE\STUDY\HELLOWORLD\TARGETVER.H'; is missing.

  (6) 通过这个方法可以把所有不存在的文件都找到。

参考文档

  [1] VS2010 always thinks project is out of date but nothing has changed http://stackoverflow.com/questions/2762930/vs2010-always-thinks-project-is-out-of-date-but-nothing-has-changed

VS2010每次调试都出现“此项目已经过期”提示的更多相关文章

  1. VS2010每次编译都重新编译整个工程的解决方案

      在使用VS2010编译C++程序的时候,每次修改工程中的某一个文件,点击“生成-仅用于项目-仅生成**”时,往往都是整个工程都需要重新编译一遍.由于这个工程代码量太大,每次编译完成都需要将近10分 ...

  2. VS2010每次编译都重新编译 解决方案

    今天用VS2010的时候遇到这个问题,总搞不定,关掉重启各种尝试都木有用,最后突然发现项目的生成时间总是2009年...好吧,原来刚才笔记本死机了,我把笔记本拆了,拔下电池,擦了擦内存条,导致系统时间 ...

  3. VS2010 F5调试时出现:“ 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常”解决

    VS2010 F5调试时出现 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常 两个解决方法:1) 打开项目属性,选择调试选项卡,将“启用非托管代码调试”一项钩上.2) 打开项目属性,选择调试选 ...

  4. 前端项目, 每次运行都需要输入 sudo 的解决方法

    前端项目, 每次运行都需要输入 sudo 的解决方法 node一直提示的sudo问题根本原因为: node 的所有者, 项目的所有者, 不同; 解决方法为: 将项目的所有者更改为 chown -R ` ...

  5. 解决gradle项目每次编译都下载gradle-x.x-all.zip gradle-x.x-bin.zip

    想必有一些热爱技术的看官或者android开发人员都会接触gradle项目.中国用户每次下载都很慢,甚至狂躁(CTMD的什么人做的这种设计,每次下载都狗日慢的想死). 哦,不好意思,骂人了.不管你高不 ...

  6. 用Meta 取消流量器缓存实现每次访问都刷新页面方便调试

    如果想禁止浏览器从本地缓存中调阅页面,可以设置网页不保存在缓存中,每次访问都刷新页面,下面是Meta在这方便的用法,需要的朋友可以参考下: <!-- 禁止浏览器从本地缓存中调阅页面.--> ...

  7. VS2010 win7 QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序

    下载源代码,注意一定是源码压缩包如qt-everywhere-opensource-src-4.8.0.zip, 不是Qt发布的已编译的不同版本的标准库如qt-win-opensource-4.8.0 ...

  8. 亲测VS2010纯静态编译QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序(图文并茂,非常详细)

    下载源代码,注意一定是源码压缩包如qt-everywhere-opensource-src-4.8.0.zip,不是Qt发布的已编译的不同版本的标准库如qt-win-opensource-4.8.0- ...

  9. Asp.Net MVC是否针对每次请求都重新创建一个控制器实例

    一.Asp.Net MVC是否针对每次请求都重新创建一个控制器实例 默认情况下,答案是确定的. ControllerBuilder类 ControllerBuilder.Current用户获取默认的控 ...

随机推荐

  1. SpringContextUtil 的配置和调用

    首先:在springmvc里面配置 <bean id="springContextUtil" class="com.hna.hka.rmc.common.util. ...

  2. [LeetCode] Sentence Similarity II 句子相似度之二

    Given two sentences words1, words2 (each represented as an array of strings), and a list of similar ...

  3. python3爬取女神图片,破解盗链问题

    title: python3爬取女神图片,破解盗链问题 date: 2018-04-22 08:26:00 tags: [python3,美女,图片抓取,爬虫, 盗链] comments: true ...

  4. ASP.NET MVC 中 View 的设计

    1. 前言  感觉有好长时间没有接触View 了,周末闲来无事,翻翻书桌上的书来回顾回顾ASP.NET MVC中View的相关内容. 2. View概述  View 通过应用程序在Action 中返回 ...

  5. [POJ 3487]The Stable Marriage Problem

    Description The stable marriage problem consists of matching members of two different sets according ...

  6. [Luogu 3389]【模板】高斯消元法

    Description 给定一个线性方程组,对其求解 Input 第一行,一个正整数 n 第二至 n+1 行,每行 n+1 个整数,为a1,a2⋯an和 b,代表一组方程.1​​,a​2​​⋯a​n​ ...

  7. ●BZOJ 2049 [Sdoi2008]Cave洞穴勘测

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2049 题解: LCT入门题 就是判两个点是否在同一颗树里 代码: #include<c ...

  8. [SPOJ 287] Smart Network Administrator 二分答案+网络流

    The citizens of a small village are tired of being the only inhabitants around without a connection ...

  9. hdu 3247 AC自动+状压dp+bfs处理

    Resource Archiver Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 100000/100000 K (Java/Ot ...

  10. hdu3567 八数码(搜索)--预处理

    题意:为你两个状态,求a到b 的最小路径,要求字典序最小. 思路: 最开始想的是目标状态是变化的,所以打表应该不行,然后直接上A*,但是TLE了- -(瞬间无语) 然后看了下别人的思路,预处理出9个状 ...