2012-02-23 187 views
8

因爲我們都知道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更新服務可能會有所幫助(它會停止更新文件),但有或可能有其他軟件無法以此方式禁用(防病毒軟件,其他實用程序等)。
參見相關的問題:

回答

1

我有同樣的問題,但在我的情況下,「修改」文件是

C:\PROGRAMDATA\SOPHOS\SOPHOS ANTI-VIRUS\CONFIG\CONFIG.BOPS 

微軟承認有一個bug(這將在下一版本固定)和建議的解決辦法

http://connect.microsoft.com/VisualStudio/feedback/details/715572/unexpected-rebuild-of-projects

http://connect.microsoft.com/VisualStudio/feedback/details/649139/vs2010-does-complete-rebuild-based-on-completely-unrelated-file

但這些都不迄今已爲我工作。我仍然試圖用我的

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.targets 

文件渣土,並添加類似下面的我的屬性頁

<ItemGroup> 
    <ClNoDependencies Include="C:\PROGRAMDATA\SOPHOS\SOPHOS ANTI-VIRUS\CONFIG\CONFIG.BOPS"/> 
</ItemGroup> 

但到目前爲止,我有沒有運氣。也許你可以得到這個解決方案爲你工作? (讓我知道如果它!)

+0

感謝您分享信息。我似乎在微軟的論壇上看到過類似的東西。無論如何,使用ClNoDependencies的方法在VS2010中不起作用...並且提到的下一個版本可能是VS2012,即將推出。我希望這個問題最終能夠得到修復:) – AntonK 2012-06-08 15:34:24

+0

我實際上已經有了這個解決方法來工作......主要是。訣竅是在每個階段添加「no dependencies」定義:編譯,鏈接,資源,嵌入清單(我可能已經忘記了它)。我得到了最初的幾個,並且看到我的「額外」重建只是執行資源和嵌入清單步驟。所以......我幾乎到了那裏,然後我的IT部門讓我們回到Sophos反病毒應用程序的早期版本來解決問題,因此整個問題都消失了。 – aldo 2012-07-05 18:59:01

+1

更新:Sophos已在解決此問題的更高版本中實施修復。我不再在當前版本的Sophos和Visual Studio 2010中遇到這個問題。 – aldo 2013-02-08 19:06:03

0

我們有與Sophos CONFIG.BOPS文件相同的問題。我們有一個龐大的團隊,我們的解決方案有80多個項目,所以其他人描述的解決方法對我們來說並不吸引人。我採取了一種非常有效的方法。有人可能會說這是一個徹頭徹尾的黑客攻擊,我承認它是這樣的,但它非常簡單,現在可以運行,直到微軟解決這個問題。

我在C#中編寫了一個小型桌面托盤應用程序,用於監視CONFIG.BOPS文件,並且只要時間戳發生更改,就會使用File.SetLastWriteTime將其設置回舊的日期,而不修改文件內容。該應用程序必須在Windows 7上以管理員身份運行,但這對我們來說很好,因爲我們的員工都對其PC具有管理權限。我們沒有NVDRSDB0.BIN問題,但我懷疑它也適用於這種情況。

+0

介意分享代碼/應用程序以節省其他人一些時間? – Thomas 2012-11-21 21:34:53

0

我能夠通過將C:\ PROGRAMDATA \ NVIDIA CORPORATION \ DRS \添加到我的用戶屬性表VC++目錄/排除目錄中來擺脫此問題。

要編輯此文件,請打開View-> Property Manager,它將位於每個項目/配置下。

如果您不想在系統範圍內執行此操作,您可以創建新的屬性表並將其添加到需要設置的項目中。您可以在Property Manager中多選所需的所有項目,然後右鍵單擊 - >添加新屬性工作表。

相關問題