2008-12-10 84 views
3

我目前使用msbuild來解決超過600個項目。從csproj文件構建依賴關係樹

想象一下,我更改了10個項目使用的1個庫的代碼。而不是提供所有600個項目到msbuild並讓它編譯所有這些項目並找出依賴關係。我想知道是否有一個程序或庫可以用來分析所有600個項目的依賴關係,並允許我只編譯必需的11個項目。

換句話說給出的所有600個項目的掃描輸入,並BaseLibrary.csproj作爲已修改的參數項目,提供我只有11個項目,我需要編譯的輸出。

我在編寫自定義任務的經歷,我只希望,而使用第三方庫做依賴關係分析,如果已經有一個在那裏。

我公司每3-4個月進行一次生產量增量發佈。作爲一個實驗,我編寫了一個自定義任務,查看以前版本的「Subversion標記」,並評估自那時起已更改的所有編譯文件,並將它們映射到項目。

唯一的使用情況下,我能想到的,不工作就是我提到的其中一個基本庫發生變化,系統不知道所有依賴於它的項目。

回答

4

你試過.NET assembly dependency analyser嗎?

它是開源的,圖形輸出dot script可能是你需要的。來自該網站的示例:

digraph G { 
     size="100,69" 
     center="" 
     ratio=All 
     node[width=.25,hight=.375,fontsize=12,color=lightblue2,style=filled] 
     1 -> 9; 
     1 -> 11; 
     9 -> 10; 
     11 -> 10; 
     1 [label="Drew.Controls.Map"]; 
     9 [label="Drew.Types"]; 
     10 [label="nunit.framework"]; 
     11 [label="Drew.Util"]; 
} 

通過項目列表和此腳本輸出,您可以創建編譯列表。

+0

這個工具似乎不幸的是不符合從來沒有(即> = VS2010)項目和解決方案的工作。有沒有類似的工具可用? – EluciusFTW 2014-04-08 13:47:44

0

MSBuild Tasks沒有你要找的東西,但它會給你寫你自己的任務一件容易的切入點。

1

項目依賴關係的曲線圖,其中項目P具有向邊如果P取決於Q.突出Q此意味着Q具有P.

一般而言之前建立一個拓撲排序的曲線圖的揭示整個圖的依賴順序,但是你只對從P到圖的根的圖(或根,如果有更多的)感興趣。

此圖中的根是不依賴其他項目但其他項目依賴於該項目的項目。

當您更改P,P到你正在運行到根(S)的所有項目都被編譯,按相反的順序(先根)。最簡單的方法是創建該路徑的子圖(使用子節點)並使用拓撲排序來確定正確的順序。

這就是說,它是一個複雜的問題,如「改變」不知何故在一個項目更改代碼必須標記該項目,還您對手工解析項目文件的依賴性。

如果我沒有弄錯,MSBuild只編譯過期的項目。 (儘管它處理它們,但它必須,否則它不能確定哪個項目'改變')。

1

我有一些代碼,完全是這樣的;我在我們的定製構建過程中使用它來:找出構建順序(無需維護它),以及b:通過隨機項目樹向上級聯變化。不幸的是,我現在不在我平時的辦公室,代碼太複雜,無法重現「袖口」(它會執行大量的圖形映射和依賴關係跟蹤)。

我應該補充說,它目前的工作原理是在每個項目的根目錄中有一個自定義標記(xml文件),用於跟蹤需要構建的項目;我們的代碼升級過程設置標誌,並且構建過程清除它。

它現在的工作方式是到達包含所有項目(任意深度)的根目錄,並且只需鍵入depends(帶有幾個開關),它就會發出所有需要構建的項目路徑,按照正確的順序。

讓我知道這是否是感興趣...