12

在Team System上自動構建所需的二進制文件的存儲位置? 您是否將它們與代碼一起存儲在SCM或其他位置? SCM中有大量的二進制文件導致源代碼控制器出現任何性能問題?是否有像Nexus或Artifactory這樣的Java工件存儲庫的.NET替代品?你在哪裏存儲版本化的DLL?

需要能夠恢復到某個外部庫的早期版本以修復發行版本中的錯誤,但是這些版本不兼容。分支可以做到這一點,但我認爲將代碼與代碼一起存儲是反模式。

歡迎提供任何建議。

+0

@David M提到的Refix項目存儲了每個程序集的版本。 – 2010-06-25 16:26:49

回答

0

我們一直存儲外部二進制依賴關係以及源代碼,圖像,構建腳本以及在版本控制系統(VCS)中一起構建解決方案所需的所有其他工件。這就是我非常擅長的VCS,它確保我們擁有適用於任何版本構建(甚至是分支)的所有必需工件的正確版本。

我很好奇:爲什麼你會認爲這是一種反模式?

+3

越來越多的團隊切換到DVCS(例如Git,Mercurial),其中每個用戶都有本地的整個回購歷史記錄。如果你的版本依賴於大的或經常變化的二進制文件,這是一種反模式,因爲它會強制每個repo擁有每個使用過的二進制文件的本地*副本(甚至是* transitively * used!)而不是*引用*直接依賴。如果它阻止團隊將其代碼分解爲獨立回購中託管的邏輯獨立組件,則可以將其視爲反模式。 – Mickalot 2014-06-21 14:51:21

+1

Git和NuGet已經推出4年了。這兩個工具相結合創建了一個更好的依賴關係管理和依賴歷史記錄,而不是舊的集中式存儲庫。我完全同意,如果你有這些工具可用,就不應該使用我原來的方法。 – 2014-07-01 13:48:21

0

顛覆例如有svn:externals可用於導入與您的庫的另一個目錄的內容。外部可能是固定到一個特定的修訂。對我而言,這是一種更好的方式,你可以避免嵌套工作副本

1

我以前一直在使用svn:externals,如cringe所述。但在本地工作副本中更新速度很慢。我已經和幾個朋友一起開始了一個開源項目,試圖解決這個問題,但這個問題還處於早期階段,但如果這是一個您感興趣的問題,您可能需要關注它(甚至幫助它)。它被稱爲Refix,並且是hosted on CodePlex

0

(我知道這是一個老問題,但我通常是基於Java的團隊做了一些.NET工作,問同樣的問題,現在,這裏是我們發現的。)

如果您使用的是像Git這樣的DVCS系統,那麼如果您將這些庫檢入到源代碼控制中,則可能會遇到性能問題。作爲參考,我們將幾個大型項目(2-5GB)與來自Perforce的簽入二進制文件轉換爲Git。導入的Git倉庫的性能(在Git 1.9上使用固態硬盤的強壯Windows操作系統)在開發過程中不合適。我們調整了我們的構建,以便從私有Nexus實例中獲取大部分依賴關係,並且顯着更簡單的回收(50-200MB的源代碼)似乎表現良好。

如果你已經有一個Nexus實例可供你使用,沒有什麼能阻止你使用它來存儲.NET工件 - 就Nexus而言,工件只是一個文件。如果你將你的DLL和配置文件壓縮成一個文件,Nexus很樂意將它作爲一個版本化的工件,你可以在需要時將它下載/解壓到正確的位置。 (我沒有使用Artifactory,所以我不能評論它的功能。)

如果你想要一些與VisualStudio(或MonoDevelop)特別集成的東西,那麼NuGet似乎是現在正在出現的答案。

默認情況下,有一個核心的NuGet源,在讀取時沒有訪問限制。對於託管,看起來您可以提交OSS /公共二進制文件以供託管,如果您想託管專有/私有二進制文件,則有instructions for setting up your own private NuGet feed

如果您有專業版的Nexus,it claims to host .NET artifacts and allow access through NuGet,但我沒有使用它的經驗。

3

Nexus和Artifactory目前都支持在.net開發中使用的二進制工件和依賴項的存儲。對於使用NuGet包構建和集成到Visual Studio的TFS,可以查看this blog.

+1

博客鏈接現在是http://www.jfrog.com/continuous-integration-using-tfs-nuget-artifactory/ – Jason 2015-03-04 00:26:48

相關問題