Chr*_*s U 193 visual-studio-2010 visual-studio
我有一个非常类似的问题,如这里所述.
我还将C++/CLI和C#项目的混合解决方案从Visual Studio 2008升级到Visual Studio 2010.现在,在Visual Studio 2010中,一个C++/CLI项目总是过时.
即使它刚刚被编译和链接F5并被点击,消息框"项目已经过时了.你想构建它吗?" 出现.这非常烦人,因为DLL文件非常低层,并且几乎所有项目的解决方案都要重建.
我的pdb设置被设置为默认值(此问题的建议解决方案).
是否有可能获得Visual Studio 2010强制重建或认为项目是最新的原因?
任何其他想法为什么Visual Studio 2010表现如此?
Mos*_*osc 224
仅适用于Visual Studio/Express 2010.查看VS2012,VS2013等的其他(更简单)答案
要查找丢失的文件,请使用文章启用C++项目系统日志记录中的信息以在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.</configSections>在行之后添加以下内容:
<system.diagnostics>
<switches>
<add name="CPS" value="4" />
</switches>
</system.diagnostics>
Run Code Online (Sandbox Code Playgroud)在调试日志中搜索表单的任何行:
devenv.exe信息:0:项目'Bla\Bla\Dummy.vcxproj'不是最新的,因为缺少构建输入'Bla\Bla\SomeFile.h'.
(我只是按Ctrl + F并搜索not up to date)这些将是导致项目永远"过时"的引用.
要更正此问题,请从项目中删除对缺少文件的任何引用,或更新引用以指示其实际位置.
注意:如果使用2012或更高版本,则代码段应为:
<system.diagnostics>
<switches>
<add name="CPS" value="Verbose" />
</switches>
</system.diagnostics>
Run Code Online (Sandbox Code Playgroud)
Sta*_*lav 166
在Visual Studio 2012中,我能够比在公认的解决方案中更容易地实现相同的结果.
我更改了菜单工具 → 选项 → 项目和解决方案 → 构建和运行 →*MSBuild项目构建输出详细程度"中的选项"从Minimal到Diagnostic.
然后在构建输出中,我通过搜索"不是最新的"找到了相同的行:
项目'blabla'不是最新的.项目项'c:\ foo\bar.xml'将'复制到输出目录'属性设置为'始终复制'.
小智 59
今天发生在我身上.我能够找到原因:该项目包含一个磁盘上不再存在的头文件.
从项目中删除文件解决了问题.
小智 15
我们也遇到了这个问题并找到了如何解决它.
问题如上所述"磁盘上不再存在该文件".
这不太正确.该文件确实存在于磁盘上,但.VCPROJ文件正在其他位置引用该文件.
您可以通过转到"包含文件视图"并依次单击每个包含文件来"发现"这一点,直到找到Visual Studio找不到的文件.然后,您添加该文件(作为现有项目)并删除无法找到的引用,一切正常.
一个有效的问题是:如果Visual Studio不知道包含文件的位置,它如何构建?
我们认为.vcproj文件在Visual Studio GUI中没有显示某个有问题的文件的相对路径,这就解释了即使包含的树视图不正确,项目实际构建的原因.
Nev*_*der 12
接受的答案帮助我找到了解决这个问题的正确途径,因为我必须开始合作.但是,我不得不处理大量错误的包含标头.使用详细的调试输出,删除一个导致IDE冻结30秒,同时输出调试spew,这使得进程非常缓慢.
我不耐烦地写了一个快速而肮脏的Python脚本来检查(Visual Studio 2010)项目文件,并一次输出所有丢失的文件,以及它们所在的过滤器.你可以找到它作为一个请点击这里:https://gist.github.com/antiuniverse/3825678(或这个支持相对路径的fork)
例:
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)
...
Run Code Online (Sandbox Code Playgroud)
源代码:
#!/c/Python32/python.exe
import sys
import os
import os.path
import xml.etree.ElementTree as ET
ns = '{http://schemas.microsoft.com/developer/msbuild/2003}'
#Works with relative path also
projectFileName = sys.argv[1]
if not os.path.isabs(projectFileName):
projectFileName = os.path.join(os.getcwd(), projectFileName)
filterTree = ET.parse(projectFileName+".filters")
filterRoot = filterTree.getroot()
filterDict = dict()
missingDict = dict()
for inc in filterRoot.iter(ns+'ClInclude'):
incFileRel = inc.get('Include')
incFilter = inc.find(ns+'Filter')
if incFileRel != None and incFilter != None:
filterDict[incFileRel] = incFilter.text
if incFilter.text not in missingDict:
missingDict[incFilter.text] = []
projTree = ET.parse(projectFileName)
projRoot = projTree.getroot()
for inc in projRoot.iter(ns+'ClInclude'):
incFileRel = inc.get('Include')
if incFileRel != None:
incFile = os.path.abspath(os.path.join(os.path.dirname(projectFileName), incFileRel))
if not os.path.exists(incFile):
missingDict[filterDict[incFileRel]].append(incFileRel)
for (missingGroup, missingList) in missingDict.items():
if len(missingList) > 0:
print("["+missingGroup+"]:")
for missing in missingList:
print(" " + os.path.basename(missing) + " (" + missing + ")")
Run Code Online (Sandbox Code Playgroud)
小智 7
我从解决方案(和磁盘)中删除了一个cpp和一些头文件,但仍然有问题.
事实上,编译器使用的每个文件都放在临时目录的*.tlog文件中.删除文件时,不会更新此*.tlog文件.这是增量构建使用的文件,用于检查您的项目是否是最新的.
手动编辑此.tlog文件或清理项目并重建.
小智 6
我有类似的问题,但在我的情况下没有文件丢失,pdb输出文件的定义方式有错误:我忘了后缀.pdb(我发现了调试日志技巧).
要解决我在vxproj文件中更改的问题,请执行以下操作:
<ProgramDataBaseFileName>MyName</ProgramDataBaseFileName>
Run Code Online (Sandbox Code Playgroud)
至
<ProgramDataBaseFileName>MyName.pdb</ProgramDataBaseFileName>
Run Code Online (Sandbox Code Playgroud)
我在VS2013(更新5)中遇到了这个问题,可以有两个原因,你可以通过在"工具" - >"项目和解决方案" - >"构建和运行"下启用"详细"构建输出来找到这两个原因.
"Forcing recompile of all source files due to missing PDB "..."
在编译器选项中禁用调试信息输出时会发生这种情况(在项目设置下:"C/C++" - >"调试信息格式"到"无"和"链接器" - >"生成调试信息"到"否":) .如果您在默认情况下保留了"C/C++" - >"程序数据库文件名"(即"$(IntDir)vc $(PlatformToolsetVersion).pdb"),由于错误,VS将无法找到该文件(https ://connect.microsoft.com/VisualStudio/feedback/details/833494/project-with-debug-information-disabled-always-rebuilds).
要修复它,只需将文件名清除为""(空字段).
"Forcing rebuild of all source files due to a change in the command line since the last build."
这似乎也是一个已知的VS错误(https://connect.microsoft.com/VisualStudio/feedback/details/833943/forcing-rebuild-of-all-source-files-due-to-a-change-in- -com -line-since-the-last-build)似乎在较新版本中修复(但不是VS2013).我知道没有解决方法,但如果你这样做,请务必在此发布.
| 归档时间: |
|
| 查看次数: |
133859 次 |
| 最近记录: |