2017-10-20 100 views
0

Du對於我現在還不能破解的奇怪依賴鏈,我想在同一解決方案中將另一個C++項目構建爲一個「後期構建」步驟。使用MSBuild任務在同一解決方案中構建另一個(C++)項目?

我知道如何調用的MSBuild在命令行上,但我想它可能會更有意義使用內置MSBuild任務只是觸發其他項目的構建:

my.vcxproj

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
... 
    <Target Name="BuildTheOtherProject" AfterTargets="Build"> 
     <MSBuild Projects="..\theother\theother.vcxproj" Targets="Build" Properties="Configuration=$(Configuration);Platform=$(Platform)"> 
     </MSBuild> 
    </Target> 
</Project> 

這似乎工作得很好乍一看,但這會繼續工作(想想:並行項目建設的完整解決方案等),我是否將正確的值傳遞給MSBuild任務?

有一個related question詢問有關C#項目的同樣的事情,似乎有一個csc的問題(這與vcxproj無關),所以我想知道一般的立場是什麼?

(我在Visual Studio的2015年大氣壓)

+0

你是什麼意思「我想知道一般的立場是什麼」?你不能成功建立另一個項目?我測試了您的代碼片段,並且它已成功構建。 –

回答

1

是您正確調用MSBuild任務。但你不應該這樣做。這是不好的風格。而且你一定會在將來使用這個隱藏在.vcxproj文件中的小技巧絆倒某人。以正確的方式指定依賴項:在解決方案文件(.sln)中,Visual Studio將確保文件按照正確的順序構建。如果您需要更多功能,則可以使用<ProjectReference>來指定依賴項,而不是使用解決方案文件,但這是一個不同的主題。

在我擁有非常龐大的代碼基礎的公司工作的所有年中:這樣的技巧從未做過,也從不應該這樣做。

+0

事實上:起初它似乎很好地工作,只是打破了完整的構建運行,因爲MSBuild實際上檢測到循環依賴,我想要解決這個問題。所以在我的情況下,它畢竟沒有工作,並且應該完成一個「ProjectReference」(目前還不能)。我鄙視解決方案的依賴關係,如果軟件項目包含多個解決方案,那麼他們很難維持。去參考'ProjectReference' - 但首先我需要在這裏清理項目結構。 –

+0

Btw .:您是否考慮在vcxproj中使用MSBuild任務「hack」,或者只有在「ProjectReference」應該工作時才使用? –

+0

嗨。我會考慮在.vcxproj中隨時使用MSBuild任務。比咬傷子彈和使用解決方案依賴性更糟糕。與解決方案(* .sln)一樣糟糕,它們比這更好。 –

相關問題