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>
  • 1
  • 2
  • 3
  • 4
  • 5

  (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.
  • 1

  (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

### 回答1: PyCharm启动时需要更新索引是因为它在启动过程中会扫描项目中的所有文件和资源,并建立一个内部的索引数据库,以便提供更快速、准确的代码分析和智能功能。 索引更新是一个必要的过程,因为项目可能会有新的文件添加进来、文件内容发生变化,或者项目的依赖发生更新。这些变化都需要被反映在PyCharm的索引中,以保证它能够正确地对项目进行分析和提供相应的功能。 索引更新可能会花费一些时间,特别是对于大型的项目而言。但好处是,一旦索引更新完成,后续的代码分析和智能提示等功能会相对更为快速和准确。 如果每次启动时都要进行索引更新,可能是因为项目变动比较频繁,或者项目过于庞大,需要更多的时间来完整地进行索引。也有可能是因为上次的索引文件有损坏或过期了,导致需要重新建立。 为了尽量减少每次启动时索引更新的时间,可以考虑以下几点: 1. 确保项目结构清晰,目录层次合理,避免过多的无关文件被扫描和索引; 2. 尽量避免频繁修改项目的文件和目录结构,以便减少索引更新的次数; 3. 调整相关设置,例如在PyCharm的设置中可以修改索引更新的策略,选择更适合自己项目的方式; 4. 升级到最新的PyCharm版本,以获得更优化的索引更新性能。 总之,PyCharm每次启动需要更新索引是为了保证代码分析和智能功能的准确性和高效性,尽量优化项目结构和相关设置,可以减少索引更新所需的时间。 ### 回答2: PyCharm是一款非常强大的Python集成开发环境(IDE),它提供了许多方便的功能来帮助开发人员编写、调试和管理Python代码。其中一个常见的问题是,每次启动PyCharm时都需要更新索引。这是因为PyCharm在后台运行并建立一个索引数据库,用于快速搜索和导航代码。 更新索引是为了确保最新的代码更改和项目结构得到正确的反映。当我们在项目中添加、移动或删除文件时,PyCharm需要更新索引以反映这些更改。此外,PyCharm还会检查项目中的依赖关系,包括Python库和框架,以确保它们在编写代码时能正确地被引用。 更新索引需要一定的时间,尤其是对于较大的项目来说。但好消息是,PyCharm只在第一次启动时更新索引,之后只会在需要时更新。这意味着,如果我们没有进行项目重构或添加新的依赖项,那么每次启动PyCharm时不会全部更新索引,而只会更新已更改的部分。 我们也可以手动触发索引更新,而不是等待PyCharm在启动时自动更新。在PyCharm的菜单栏中,选择"File" -> "Invalidate Caches / Restart",然后选择"Restart",这将强制PyCharm重建索引。这在我们修改了项目结构或遇到索引相关问题时非常有用。 尽管每次启动都需要更新索引可能会耗费一些时间,但这是为了确保我们在开发过程中能够正确地使用PyCharm的各种功能。通过自动更新或手动触发更新,PyCharm可以始终保持我们的代码库和项目结构的最新状态,提供更好的代码导航和搜索体验。 ### 回答3: PyCharm是一款非常流行的Python集成开发环境,它提供了丰富的功能和工具,用于帮助开发者提高工作效率。有时在启动PyCharm时,我们可能会发现它要更新索引的提示。 PyCharm的索引是一个用于加快代码导航、代码补全和代码分析等功能的重要组成部分。它会扫描项目中的源代码和库文件,并构建索引以供后续的编辑和分析操作使用。索引的更新通常发生在以下几种情况下: 1. 第一次打开项目:当我们第一次在PyCharm中打开一个项目时,它会扫描项目的代码,并在本地构建索引。这个过程可能需要花费一些时间,因为PyCharm需要解析和分析大量的源代码文件。 2. 修改项目结构:如果我们在项目中添加、删除或移动了源代码文件或库文件,PyCharm就会检测到项目结构的变化,并要求我们更新索引。这是因为索引需要反映最新的项目结构信息,以确保后续的代码导航和分析操作的准确性。 3. 更新PyCharm版本:当我们升级PyCharm到新版本时,新版本可能会带来一些改进和新功能,这些改进和新功能可能需要重新构建索引以使其生效。因此,PyCharm启动时可能会提示更新索引。 在每次启动PyCharm时更新索引是为了确保索引的准确性和完整性,从而提供更好的代码编写和分析体验。尽管它可能需要一些时间,但这是一个值得的过程,因为它可以帮助我们更高效地开发和维护Python项目
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值