Visual studio VisualStudio2010总是认为项目已经过时,但并没有任何改变

Visual studio VisualStudio2010总是认为项目已经过时,但并没有任何改变,visual-studio,visual-studio-2010,Visual Studio,Visual Studio 2010,我有一个非常类似的问题 我还将C++/CLI和C#项目的混合解决方案从VisualStudio2008升级到VisualStudio2010。现在在VisualStudio2010中,一个C++/CLI项目总是过期 即使在F5被点击之前它已经被编译和链接,消息框“项目已经过时了。你想构建它吗?”也会出现。这是非常烦人的,因为DLL文件是非常低层的,并且几乎强制解决方案的所有项目重新构建 我的pdb设置设置为默认值() 是否有可能获得VisualStudio2010强制重建或认为项目是最新的原因

我有一个非常类似的问题

我还将C++/CLI和C#项目的混合解决方案从VisualStudio2008升级到VisualStudio2010。现在在VisualStudio2010中,一个C++/CLI项目总是过期

即使在F5被点击之前它已经被编译和链接,消息框“项目已经过时了。你想构建它吗?”也会出现。这是非常烦人的,因为DLL文件是非常低层的,并且几乎强制解决方案的所有项目重新构建

我的pdb设置设置为默认值()


是否有可能获得VisualStudio2010强制重建或认为项目是最新的原因


还有什么其他想法可以解释为什么VisualStudio2010的行为是这样的吗?

不管怎样,.NET项目都会重新编译。这其中的一部分是使IDE保持最新(如IntelliSense)。我记得几年前在一个Microsoft论坛上问过这个问题,这就是我得到的答案。

大多数构建系统使用数据时间戳来确定何时应该进行重建-根据依赖项的上次修改时间检查任何输出文件的日期/时间戳-如果任何依赖项更新鲜,然后重建目标


如果任何依赖项以某种方式获得无效的数据时间戳,这可能会导致问题,因为任何生成输出的时间戳都很难超过假定在将来创建的文件的时间戳:p

今天我遇到了这种情况。我能够找到原因:该项目包含一个不再存在于磁盘上的头文件


从项目中删除文件解决了问题。

我们也遇到了这个问题,并找到了解决方法

问题如上所述:“磁盘上不再存在该文件。”

这是不完全正确的。该文件确实存在于磁盘上,但.VCPROJ文件正在其他地方引用该文件

通过转到“包含文件视图”并依次单击每个包含文件,直到找到Visual Studio找不到的文件,您可以“发现”该文件。然后添加该文件(作为现有项),删除找不到的引用,一切正常

一个有效的问题是:如果VisualStudio不知道包含文件在哪里,它如何构建

我们认为.vcproj文件在某个地方有一些相对路径,它没有显示在Visual Studio GUI中,这就解释了为什么即使includes的树状视图不正确,项目仍将实际生成。

仅适用于Visual Studio/Express 2010。请参阅VS2012、VS2013等的其他(更简单)答案

要查找,请使用本文中的信息在Visual Studio中启用调试日志记录,并让它告诉您导致重建的原因:

  • 打开
    devenv.exe.config
    文件(可在
    %ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\
    %ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Common7\IDE\
    中找到)。对于Express版本,配置文件名为
    V*Express.exe.config
  • 行后添加以下内容:

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

    对我来说,这是在项目内部的“头文件”上存在一个不存在的头文件。删除此条目(右键单击>从项目中排除)后,第一次重新编译,然后直接

    =======生成:0成功,0失败,5最新,0跳过==========


    没有人试图在不进行修改的情况下进行重建。我认为是VS2010实现的构建前检查(不确定是否有文档记录,可能是),它会触发“AlwaysCreate”标志。

    我也有类似的问题,但在我的情况下没有丢失任何文件,pdb输出文件的定义有一个错误:我忘记了后缀.pdb(我是通过调试日志技巧发现的)

    为了解决问题,我在vxproj文件中更改了以下行:

    <ProgramDataBaseFileName>MyName</ProgramDataBaseFileName>
    
    MyName
    

    MyName.pdb
    
    我已经从解决方案(和磁盘)中删除了一个cpp和一些头文件,但仍然存在问题

    事实是,编译器使用的每个文件都在temp目录中的*.tlog文件中。 删除文件时,此*.tlog文件不会更新。这是增量构建用来检查项目是否是最新的文件


    手动编辑此.tlog文件或清理项目并重新生成。

    我遇到了此问题,并发现了以下问题:

    VisualC++项目不断地过时(<代码> WWWLM.HMACW332 .h RPCRR.H MaMaNe1.H代码/代码>缺失)

    问题: 每个错误如下所示:

      MyApplication : warning PRJ0041 : Cannot find missing dependency 'macwin32.h' for file 'MyApplication.rc'.  
    
    您的项目可能仍在生成,但在找到此文件之前,可能会继续显示为过期

    解决方案: 在项目的.rc文件中包含
    afxres.h
    而不是
    resource.h

    项目的.rc文件包含“#include resource.h”。由于资源编译器不支持预处理器
    #ifdef
    块,因此它将穿透并尝试查找应该忽略的include文件。h包含许多这样的块。包含afxres.h则修复了PRJ0041警告,并消除了“项目已过时”错误对话框


    我在VisualStudio2005中遇到了类似的问题,我的解决方案由以下依赖项中的五个项目组成(首先构建在顶部):

    我发现Video_Codec项目需要一个完整的构建,即使在解决方案完全清理然后重新构建之后

    我通过确保t来解决这个问题
    <ProgramDataBaseFileName>MyName.pdb</ProgramDataBaseFileName>
    
      MyApplication : warning PRJ0041 : Cannot find missing dependency 'macwin32.h' for file 'MyApplication.rc'.  
    
    Video_Codec depends on nothing
    Generic_Graphics depends on Video_Codec
    SpecificAPI_Graphics depends on Generic_Graphics
    Engine depends on Specific_Graphics
    Application depends on Engine.
    
    D:\...> check_inc.py sdk/src/game/client/swarm_sdk_client.vcxproj
    [Header Files]:
      fx_cs_blood.h   (cstrike\fx_cs_blood.h)
      hud_radar.h   (cstrike\hud_radar.h)
    [Game Shared Header Files]:
      basecsgrenade_projectile.h   (..\shared\cstrike\basecsgrenade_projectile.h)
      fx_cs_shared.h   (..\shared\cstrike\fx_cs_shared.h)
      weapon_flashbang.h   (..\shared\cstrike\weapon_flashbang.h)
      weapon_hegrenade.h   (..\shared\cstrike\weapon_hegrenade.h)
      weapon_ifmsteadycam.h   (..\shared\weapon_ifmsteadycam.h)
    [Source Files\Swarm\GameUI - Embedded\Base GameUI\Headers]:
      basepaenl.h   (swarm\gameui\basepaenl.h)
      ...
    
    /fileLoggerParameters:LogFile=MyLog.log;Append;Verbosity=diagnostic;Encoding=UTF-8