VS2010每次调试都出现“此项目已经过期”提示
问题描述
最近因为项目需要,开发平台从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每次调试都出现“此项目已经过期”提示的更多相关文章
- VS2010每次编译都重新编译整个工程的解决方案
在使用VS2010编译C++程序的时候,每次修改工程中的某一个文件,点击“生成-仅用于项目-仅生成**”时,往往都是整个工程都需要重新编译一遍.由于这个工程代码量太大,每次编译完成都需要将近10分 ...
- VS2010每次编译都重新编译 解决方案
今天用VS2010的时候遇到这个问题,总搞不定,关掉重启各种尝试都木有用,最后突然发现项目的生成时间总是2009年...好吧,原来刚才笔记本死机了,我把笔记本拆了,拔下电池,擦了擦内存条,导致系统时间 ...
- VS2010 F5调试时出现:“ 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常”解决
VS2010 F5调试时出现 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常 两个解决方法:1) 打开项目属性,选择调试选项卡,将“启用非托管代码调试”一项钩上.2) 打开项目属性,选择调试选 ...
- 前端项目, 每次运行都需要输入 sudo 的解决方法
前端项目, 每次运行都需要输入 sudo 的解决方法 node一直提示的sudo问题根本原因为: node 的所有者, 项目的所有者, 不同; 解决方法为: 将项目的所有者更改为 chown -R ` ...
- 解决gradle项目每次编译都下载gradle-x.x-all.zip gradle-x.x-bin.zip
想必有一些热爱技术的看官或者android开发人员都会接触gradle项目.中国用户每次下载都很慢,甚至狂躁(CTMD的什么人做的这种设计,每次下载都狗日慢的想死). 哦,不好意思,骂人了.不管你高不 ...
- 用Meta 取消流量器缓存实现每次访问都刷新页面方便调试
如果想禁止浏览器从本地缓存中调阅页面,可以设置网页不保存在缓存中,每次访问都刷新页面,下面是Meta在这方便的用法,需要的朋友可以参考下: <!-- 禁止浏览器从本地缓存中调阅页面.--> ...
- VS2010 win7 QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序
下载源代码,注意一定是源码压缩包如qt-everywhere-opensource-src-4.8.0.zip, 不是Qt发布的已编译的不同版本的标准库如qt-win-opensource-4.8.0 ...
- 亲测VS2010纯静态编译QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序(图文并茂,非常详细)
下载源代码,注意一定是源码压缩包如qt-everywhere-opensource-src-4.8.0.zip,不是Qt发布的已编译的不同版本的标准库如qt-win-opensource-4.8.0- ...
- Asp.Net MVC是否针对每次请求都重新创建一个控制器实例
一.Asp.Net MVC是否针对每次请求都重新创建一个控制器实例 默认情况下,答案是确定的. ControllerBuilder类 ControllerBuilder.Current用户获取默认的控 ...
随机推荐
- [LeetCode] Maximum Average Subarray II 子数组的最大平均值之二
Given an array consisting of n integers, find the contiguous subarray whose length is greater than o ...
- Spring Boot 之Hello Word
Spring Boot官网:http://projects.spring.io/spring-boot/ 环境准备:maven 3.3.5.jdk8.Idea 1.创建maven项目工程 2.引入st ...
- Linux使用踩坑记
Ubuntu安装坑: 1.对于新手第一次安装ubuntu,特殊情况会出现因为分辨率问题导致安装界面不全,无法进行下一步操作. 解决方案:使用alt+鼠标左键拖动屏幕Linux文件名乱码问题: 2.因为 ...
- [SHOI2008]小约翰的游戏John
Description 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取 的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不 ...
- Codeforces Round #438 C. Qualification Rounds
Description Snark and Philip are preparing the problemset for the upcoming pre-qualification round f ...
- Codeforces Round#432 简要题解
来自FallDream的博客,未经允许,请勿转载,谢谢. Div2A 小判断题 Div2B 小判断题,合法的条件是|AB|=|BC|且三点不共线 Div1A 类比二维.三维空间,可以猜测n太大的时候没 ...
- [bzoj4922]Karp-de-Chant Number
来自FallDream的博客,未经允许,请勿转载,谢谢. 卡常数被称为计算机算法竞赛之中最神奇的一类数字,主要特点集中于令人捉摸不透,有时候会让水平很高的选手迷之超时. 普遍认为卡常数是埃及人Qa'a ...
- ANI功能分析
1 ANI ANI(Adapt Noise Immunity)就是基于CCK错包率,和/或CCK错包率,自动调整抗扰等级,从而提高或降低灵敏度,达到提高整体性能的目标. 2 关键常量 firstep_ ...
- SQL Server 连接 MySQL
1.在SQL SERVER服务器上安装MYSQL ODBC驱动; 驱动下载地址:http://dev.mysql.com/downloads/connector/odbc/ 2.安装好后,在管理工具- ...
- PHP+JQuery+Ajax初始化网站基本信息(附源码)--PHP
一.思路 为了保存用户会员信息的时间长一些,不局限于session的关闭.我们需要将用户信息保存在数据库中,前台每次登录都需要进行校验,来查看用看用户会员信息是否过期,如果没有过期,取出用户会员信息存 ...