2011-04-20 44 views
5

好的,所以我們有一個相當大的解決方案,其中包含大約8個不同的項目。這些項目中的每一個都依賴於各種不同的第三方組件。此解決方案位於源代碼管理的主幹分支中。我們還有大約5個不同的分支。你應該在哪裏存儲第三方程序集?

什麼是管理這些第三方組件的最佳方式?當您添加對組件的引用,然後單擊它並查看屬性窗口時,我注意到它具有組合件的硬編碼路徑。

例如:我們所有的分支機構都映射到 「C:\代碼\」。因此,主幹將是「C:\ Code \ Trunk」,分支將是「C:\ Code \ somebranch」。

如果我創建一個文件夾「C:\代碼\幹線」稱爲「組件」,然後刪除所有的第三方組件該文件夾中,然後我引用添加到裝配在那裏組裝的參考相對是?如果我點擊添加的程序集,我看到灰色的路徑屬性顯示「C:\ Code \ Trunk \ Assemblies \ someassembly.dll」。

,如果我然後分支樹幹,會發生什麼? 「somebranch」仍然會引用「C:\ Code \ Trunk \ Assemblies \ someassembly.dll」,或者它會引用「C:\ Code \ somebranch \ Assemblies \ someassembly.dll」嗎?

目前我們確實有在源代碼管理的分支稱爲被映射「組件」,就像任何其他分支,到「C:\代碼\」。因此,無論項目位於哪個分支,所有引用程序集的分支都引用「C:\ Code \ Assemblies \ someassembly.dll」,路徑將相同。

不幸的是,這意味着你必須獲得最新版本你的工作在分支和組件分支,以獲得成功地構建解決方案。

要總括起來:

  • 你如何添加一個參考,是相對於該如何解決? (即添加對C:\ Code \ Trunk \ Assemblies \ someassembly.dll的引用,並使該路徑相對於添加它的項目,以便在創建分支時引用分支的程序集文件夾而不是主幹的程序集文件夾。這是參考已經相對?

  • 什麼是管理第三方組件等推薦的策略?

回答

2

是使用樹幹外的組件文件夾。我更喜歡名字lib,然後裝配。

是的路徑已經相對。當你分支你的項目將得到正確的程序集文件夾。

根據您所使用你讓也想組織你的組件文件夾,以便它不是dll的一個大麻煩多少第三方組件。

+0

正確的,我們確實有Assemblies文件夾分成整齊的子目錄。只要這些路徑是相對的,那麼我認爲這不是問題。謝謝您的幫助。 – Chev 2011-04-20 16:59:20

0

我通常創建一個共同的項目,所有的人引用,裏面是共同的項目,我創建一個文件夾稱爲deps(用於依賴關係)。其他項目中的每一個然後在公共項目的deps文件夾中引用該DLL的副本

5

現在我們有nuget您可以將它用於所有支持的oss包,​​甚至可以爲其他第三方組件創建your own nuget packages。值得一提的是openwrap作爲nuget的替代品。在解決方案級別

的NuGet店包,這樣每個分支(和幹線)將保持版本的這些。

我建議這是更好的行爲。例如,如果升級第三方,您會希望保持程序集版本不同。

在過去,我使用svn的externals命令從內部開發的依賴項構建特定版本。沒有理由不能將它們存儲在存儲庫中,並使用外部(或者您的scm等價物)來獲得正確的版本。

我已經使用構建事件來讓dll進入正確的位置。

1

我們在第三方參考解決方案中有一個SolutionItems文件夾。 解決方案的每個分支都有自己的副本。

當我們添加一個引用時,我們使用添加引用對話框中的'瀏覽'選項卡並選擇相對於我們當前項目的程序集。

項目文件包含此:

<Reference Include="SomeAssembly, Version=0.1.0.0, Culture=neutral, PublicKeyToken=8xxxxxxxxxxx, processorArchitecture=MSIL"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\Solution Items\SomeAssembly.dll</HintPath> 
</Reference> 
相關問題