可能沒有內置的方法來執行此操作(任何版本的VS安裝的MSBuild文件都不會執行該項目的構建,並且其功能請求爲like this one)。一個非常快速的解決方案是創建一個msbuild文件,該文件將引用的項目構建爲預構建事件,並將該文件包含在引用另一個項目的每個項目中。例如,在共同構建工具左右目錄下創建一個名爲文件buildprojectreferenecs.targets,與內容
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="BuildProjectReferences" BeforeTargets="BuildGenerateSources">
<MsBuild Projects="@(ProjectReference)"
Properties="Configuration=$(Configuration);Platform=$(Platform)"/>
</Target>
</Project>
這只是構建具有相同配置和平臺項目,包括它的每個ProjectReference。在使用項目引用的每個項目中導入。導入必須在定義了ProjectReference項目後進行,因此請將其放入
...
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <!-- this is near the bottom already -->
<Import Project="..\BuildProjectReferences.targets" /> !<-- add this -->
...
</Project>
現在,如果你運行構建,實際編譯開始之前會發生引用的項目的生成(反過來他們引用的項目等),不管他們是:在底部一路該解決方案與否。一些缺點:
- 如果添加一個項目refernce卻忘了導入此文件沒有任何反應
- 構建無條件地發生,所以如果參考項目已經建成了構建再次啓動;雖然它也會立即完成,因爲構建系統發現所有輸出都是最新的
- VS中的構建系統將無法檢測到解決方案之外的引用項目的更改,因此如果解決方案中的所有項目都是最新的,並且在不會構建的解決方案之外更改引用項目中的源文件。儘管命令行構建不是這樣,但是會有一個項目的構建開始,因此也會構建引用的項目。
總而言之,我不知道它是否值得。由於您選擇了「單主解決方案」方法,可以說解決方案應該是項目的單一解決方案,因此必須包含從源構建的所有依賴關係。開發者的任務就是確保這一點。爲了趕上失敗這麼快,最好的解決方案是建立一個構建服務器,它將每個提交構建到代碼庫,並且因此可以快速發現錯誤。然後開發人員會通知他們的錯誤,並且很快就會應用這個修補程序(特別是因爲它很簡單)。
什麼語言? C++?您可以使用項目引用,它們是項目文件的一部分,而不是解決方案文件,因此每個使用該方案的解決方案都會自動獲取參考。 – stijn
是的,C++。我們使用引用,但是如果引用的項目不在解決方案中,是否有辦法告訴Visual Studio繼續構建它? – traal
我很確定沒有內置的方式。你可以用一個msbuild目標創建一個文件,它只是建立它所看到的所有項目引用,然後將這個文件包含在你擁有的所有項目中。幾乎完美的是,它並不是說它仍然不會構建,例如,解決方案A中沒有任何更改,但是解決方案A之外的項目中的源文件發生更改,因爲A不會檢測到它自己的項目的任何更改。這可能也可能是固定的,但這已經很難了。無論如何:我選擇的解決方案是使用CI設置,因此任何構建破損都會被發現:] – stijn