因爲我們都知道VS2010已經對其構建系統進行了重大升級,該系統基於MSBuild。
根據MS代表(參見Visual Studio 2010 always rebuild project after hibernation/restart of computer中的註釋),MSBuild現在將自己注入到其他工具(如C++編譯器,鏈接器等)中以找出目標的依賴關係。
這樣的一種方法的缺點是,現在您的項目可能被強制重建,因爲不相關的文件 :(
在我的情況下,它是C:\PROGRAMDATA\NVIDIA CORPORATION\DRS\NVDRSDB0.BIN
,這是定期更新NVIDIA服務改變的修改(Windows 7的32位位)。由於修改了無關文件,VS2010重建了C++項目
我發現,通過打開VS2010選項「MSBuild項目生成輸出的詳細程度」和「MSBuild項目生成日誌文件冗長」到「診斷」。
後,我能查看原因在生成輸出窗口的問題:
Task "CL" (TaskId:55)
Read Tracking Logs: (TaskId:55)
..\..\temp\Release\Editor\cl.read.1.tlog (TaskId:55)
Outputs for E:\USERS\A.USER.ORG\DEVEL\EDITOR\STDAFX.CPP: (TaskId:55)
E:\USERS\A.USER.ORG\DEVEL\TEMP\RELEASE\EDITOR\STDAFX.OBJ (TaskId:55)
C:\PROGRAMDATA\NVIDIA CORPORATION\DRS\NVDRSDB0.BIN was modified at 23-Feb-12 12:08:20. (TaskId:55)
stdafx.cpp will be compiled. (TaskId:55)
...
Tracking command: (TaskId:55)
C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\Tracker.exe ... stdafx.cpp /clr:nostdlib (TaskId:55)
stdafx.cpp (TaskId:55)
Done executing task "CL". (TaskId:55)
其中一個解決方法是無關的文件添加到C++忽略列表:
<ItemGroup>
<ClNoDependencies Include="NVDRSDB0.BIN" />
<ClNoDependencies Include="C:\PROGRAMDATA\NVIDIA CORPORATION\DRS\NVDRSDB0.BIN" />
</ItemGroup>
不幸的是這並沒有幫助:(我沒還沒有檢查這種技巧如何在其他PC上運行,而這些文件不存在。
所以問題仍然存在:是有人意識到這個問題的工作解決方案?
我沒有嘗試安裝SP1的VS2010 - 根據發燒友這一步也沒有幫助。
禁用NVIDIA更新服務可能會有所幫助(它會停止更新文件),但有或可能有其他軟件無法以此方式禁用(防病毒軟件,其他實用程序等)。
參見相關的問題:
- VS2010 always thinks project is out of date but nothing has changed(類似的問題似乎是由一個丟失的源文件所致)
感謝您分享信息。我似乎在微軟的論壇上看到過類似的東西。無論如何,使用ClNoDependencies的方法在VS2010中不起作用...並且提到的下一個版本可能是VS2012,即將推出。我希望這個問題最終能夠得到修復:) – AntonK 2012-06-08 15:34:24
我實際上已經有了這個解決方法來工作......主要是。訣竅是在每個階段添加「no dependencies」定義:編譯,鏈接,資源,嵌入清單(我可能已經忘記了它)。我得到了最初的幾個,並且看到我的「額外」重建只是執行資源和嵌入清單步驟。所以......我幾乎到了那裏,然後我的IT部門讓我們回到Sophos反病毒應用程序的早期版本來解決問題,因此整個問題都消失了。 – aldo 2012-07-05 18:59:01
更新:Sophos已在解決此問題的更高版本中實施修復。我不再在當前版本的Sophos和Visual Studio 2010中遇到這個問題。 – aldo 2013-02-08 19:06:03