2010-09-09 79 views
0

我有一個約70個項目的解決方案,它們之間有很多依賴關係(我實際上製作了一個圖形,它有約300條邊)。我知道一些依賴不是必需的。我希望它在構建時使用多個內核,我想這些不必要的依賴可能會影響構建的並行性。如何處理VS解決方案中的依賴性混亂?

基本上我想知道哪些依賴關係是構建程序所必需的,哪些依賴關係可以被刪除。我只關心能夠構建軟件,而不是運行它。有什麼方法可以自動找到?

項目是C++,C++/CLI和C#。有些依賴項是手動指定的(使用VS中的Project Dependencies窗口),有些依賴項是託管程序集引用(可能不是必需的),有些依賴於靜態/動態鏈接庫(也可能不是必需的)。

回答

1

對於C#項目,您可以使用Ildasm.exe。查看.assembly指令的清單。 C#編譯器會自動刪除那些未使用的。如果您在項目的References節點中看到沒有匹配的.assembly指令的引用,則可以將其刪除。

不確定C++/CLI編譯器是否也這樣做。試試看。

C++要困難得多,因爲構建工具可以生成超出.lib的文件。類似於從IDL創建並由託管代碼使用的類型庫。或IDL的.h文件。或.rc文件中的.res文件。還有可能是沒有人發現的依賴。當您使用具有大量內核的機器時,會破壞內部版本。

通過使用/ VERBOSE選項分析鏈接器的輸出,您可以瞭解是使用靜態還是導入.lib。使用.lib中的符號時,(大)輸出中會有一行。通過顛倒.sln文件中項目的順序並進行乾淨的構建,衝出失蹤的項目依賴關係,只強制使用一個CPU。

+0

哇,謝謝你的想法。這看起來有希望。 – liori 2010-09-09 18:28:42