大約一年前,一個類似的問題被問及並得到了回答,但要麼是一個不同的問題(一切都處於測試階段)或被誤診。它位於:MSbuild task fails because "Any CPU" solution is built out of order。爲什麼Tfs2010在其他任何東西之前構建我的Wix項目?
我的問題是我有一個wix安裝程序項目,並且在星期一升級到Tfs2010後,生成鏈接失敗,因爲它無法在項目中找到Wpf應用程序的生成產品。經過一番挖掘,這是因爲它還沒有建成。 Vs2010中的建築正常工作。 wix項目設置爲依賴於Wpf項目,並且在IDE中查看Project Build Order時,一切看起來都很正常。
該問題最初是在解決方案中只有兩個平臺定義時遇到的; x86和x64。也有兩種風格,Debug和Release,並且TFSBuild.proj被設置爲構建所有四種組合。任何地方都沒有AnyCPU出現。根據上面提到的問題,我嘗試將Wpf項目更改爲使用AnyCPU,以便首先構建它。此時,wix項目使用了確切的配置,而Wpf項目使用AnyCPU的風格。但是,這樣做似乎沒有改變任何事情。
我正在使用Tfs2010 RTM,Vs2010 RTM和最新版本的Wix,它們在撰寫本文時是從2010-04-02開始的3.5.1602.0。任何其他人遇到這個?
2010-04-27:相當程度的挖掘,並再現克隆VM構建機器上後,我相信我知道發生了什麼事情,也什麼是失敗,但我不太知道如何解決它。
情況是,該錯誤似乎表現出基於解決方案文件中純粹繪製運氣的項目排序的症狀。看起來好像解決方案文件只是盲目地按照它們出現的順序構建項目,依賴於它能夠檢測未構建的引用並在需要時按需構建它們。
在我特別的解決方案文件中,我的Wix項目是在我的Wpf應用程序項目之前訂購的。這導致Wix項目首先被構建,並且正確地檢測到對Wpf項目的依賴關係,但實際的MSBuild任務因爲未定義的$(BuildProjectReferences)變量而被忽略,我提到了這篇文章主要文章中的一些評論線。由於MSBuild的詳細程度仍然在診斷之中,所以BuildProjectReferences可以看作是未定義的構建Wix項目,並且在構建Wix項目的任務中構建Wpf項目時可以將其定義爲true。然而,在測試時,它會再次評估未定義的任務,並且Wix構建失敗,因爲它無法找到未構建的Wpf項目的構建輸出。
因此,底線:因爲$(BuildProjectReferences)變量不正確而跳過了項目依賴關係。有趣的是,這個變量只存在於Wix2010.targets文件中,而不存在於wix.targets中;我想這就是爲什麼在安裝Tfs2010和Vs2010後才顯示出來。
解決方案:如何確保BuildProjectReferences正確傳遞到後續的MSBuild任務?有什麼特別的變量範圍正在進行?
2010-09-14:在WiX工具集中出現此問題的一個錯誤:http://sourceforge.net/tracker/?func=detail&atid=642714&aid=2990231&group_id=105970並在前一段時間修復。希望這不再是一個問題。如果是這樣,請打開一個新的錯誤。
爲了直接解決您的評論,我的解決方案中沒有任何內容在其構建文件中具有AnyCPU配置。我創建了AnyCPU配置,僅用於測試我的原始帖子中鏈接到的線程建議的解決方案。在它不起作用後,我再次刪除了AnyCPU配置。
此外,項目位於相同的解決方案文件中,但在單獨的解決方案文件夾(接口文件夾,安裝程序文件夾)中(如果有的話)。有趣的是,我打算製作一個小型沙盒示例,以便我可以說明我遇到的問題,但是在創建我的小樣本解決方案後,我無法獲取重現的錯誤。這讓我想,也許這是使用從Tfs2008團隊項目升級的團隊項目而不是在Tfs2010中創建的團隊項目的結果。如果我無法弄清楚測試解決方案的工作原理,我可以嘗試將我的項目分支到一個新項目中來測試這個理論。
p.s.另外,我是新來的stackoverflow - 如果「回答你自己的問題」工作流只是爲了提供具體的答案,爲什麼地球上的評論長度有限?
所以我把構建冗長達到診斷和今天通讀一遍,尤其是一線站出來對我說:
Task "MSBuild" skipped, due to false condition; ('@(_ProjectReferenceWithConfiguration)'!='' and '$(BuildingInsideVisualStudio)' != 'true' and '$(BuildProjectReferences)' == 'true' and '@(_MSBuildProjectReferenceExistent)' != '') was evaluated as ('..\WpfApp\WpfApp.csproj'!='' and '' != 'true' and '' == 'true' and '..\WpfApp\WpfApp.csproj' != '').
這被看作是我的安裝項目試圖建立我的wpf項目,因爲wpf項目被引用。特別是,出於某種原因,$(BuildProjectReferences)正在評估爲'',當我確信它應該是'真實的'。
在日誌中但是前面,在MSBuild任務的WpfApp項目開始時,我看到了這一點:
Task "MSBuild" (TaskId:15)
...
Initial Properties:
...
BuildProjectReferences = true
所以財產確實是正確的,直到任務的開始,但隨後被顯然被覆蓋?我不清楚這些屬性是如何設置的。
我遇到了同樣的問題,但仍未能解決它。 – 2010-04-21 13:56:05
我已經做了一些研究。從頭開始重新創建解決方案似乎可行,我認爲這可能與訂單項目添加到解決方案中有關。這是純粹的猜測,雖然... – 2010-04-21 14:56:47
編輯原始問題描述與更多信息。 – bwerks 2010-04-27 19:35:10