2010-08-09 192 views
3

我最近開始在一個企業軟件環境中工作,數百個不同的應用程序都被限制在自己的「孤島」中。我的任務之一是嘗試將事情標準化,第一次嘗試將是標準事件日誌記錄。目前,該公司的「標準」是「每個人都應該使用企業庫進行登錄」。這實際上轉化爲什麼,不同的開發人員在不同的項目中執行不同的日誌記錄,並且大多數時間使用該庫。TFS項目可以相互引用嗎?

爲此,我期望在「公司標準」內部開發的接口背後提供實際的日誌記錄工具。這個想法是將「標準」的重點從實施工具中移開,並轉移到如何使用它。然後,應用程序將使用內部庫,而不關心幕後的工具(除了可能是app.config部分,儘管我已經知道如何用log4net將其抽象出來)。

但是,我現在面臨的一個問題是,所有這些應用程序都在單獨的TFS項目中。如果我創建了一個包含用於日誌記錄的公共庫的項目,那麼其他項目是否可以引用它?我不想在每個項目中分發這個庫,因爲它們會很快失去同步。

如果TFS無法做到這一點,有沒有人有任何其他建議?

+0

http://stackoverflow.com/questions/3385282/ best-practice-to-share-projects-between-solution-trees-msvs-2008-msvs-2010/3390190#3390190 – Robaticus 2010-08-09 19:52:14

+0

@Robaticus:我真的沒有找到那個,謝謝。初看起來,那裏的提問者使用的TFS與我們有些不同(更先進)。答案是需要進行一些調查,因爲聽起來(快速瀏覽)聽起來有點像黑客,可能會變成我們環境的維護噩夢:( – David 2010-08-09 19:59:25

+0

我是那裏的迴應者,我們回到了兩個解決方案之一是共享目錄,解決方案2是所示的方法,在成功構建之後,共享目錄將從TFS更新,根據我們所瞭解的情況,當我們移至2010年時,我們將調查共享目錄方法 – Robaticus 2010-08-09 20:01:58

回答

4

TFS沒有「共享」文件夾的概念(例如我們使用Visual SourceSafe)。工作區爲您提供了一些靈活性,但只要您嘗試將同一個「共享」文件夾映射到多個項目,就會崩潰。只有幾個選項可以解決您的具體情況:

  1. 將日誌項目分支到每個需要它的團隊項目。當您對日誌記錄項目進行更改時,您需要或者A)將日誌記錄項目更改合併到每個已分支到(「推送」)的項目或B)要求每個項目團隊使用記錄更改執行合併以獲取最新更改(「拉」)。

  2. 作爲日誌記錄項目的自動構建過程的一部分,將二進制文件發佈到衆所周知的位置。讓每個需要記錄二進制文件的項目都設置一個預生成事件,將最新版本的記錄二進制文件複製到他們的解決方案- 或 -而不是預生成事件中,也可以讓自動構建過程獲取當前記錄二進制文件並將其添加到解決方案(根據需要執行checkout/ins)。

可能還有其他的解決方案(通常有),但這就是所有這些想法。

希望這會有所幫助。

+0

是的。概述了這些選項http://stackoverflow.com/questions/3385282/best-practice-to-share-projects-between-solution-trees-msvs-2008-msvs-2010/3390190#3390190 – Robaticus 2010-08-09 20:02:51

+0

它會根據目前爲止所有人的反饋,這兩個都是主要的選擇,我會誠實地說,這是基於我對這個特定環境的經驗(這與我以前工作過的任何環境都非常不同) ,兩種選擇聽起來就像他們在這裏很難維護,隨着時間的推移,問題的可能性越來越大。其中很大一部分是基於我們的構建/部署過程是_mess_的事實。 (還有別的我試圖修復。) – David 2010-08-09 20:08:34

+1

我認爲這是一個自動化過程引發的災難。想象一下,你的API /工具在6個項目中使用,其中一個項目需要一個主要的支持並實現它。接下來構建5個其他項目去「kaboom」。取而代之的是,@RyanCromwell的所有依賴工具和API的版本控制和源代碼控制在他的答案中都有所體現。 – 2010-08-10 08:52:12

0

我們成功的做法是用一個解決方案創建一個單獨的TFS項目,該解決方案包含像日誌這樣的庫的項目。當我們構建這個解決方案時,我們將程序集部署到服務器上的共享驅動器上。當我們需要使用這些庫中的一個時,我們只需通過瀏覽到它在服務器上的位置來添加對程序集的引用。如果您需要對其中一個庫進行更改,您可以隨時進行更改。下一次使用該組件的項目中的一個將被更新爲新版本。

5

傑夫的建議是最接近我們的建議。考慮內部API是一個獨立的團隊項目,作爲客戶爲其他項目提供服務。那些項目會支持積壓和發佈週期。您可以根據需要製作CI,Beta和Release版本。消費/消費項目然後是使用他們選擇的版本,因爲他們可以在他們自己的發佈週期中適當地適應。因爲你的TFS版本會推到可用的放置位置,所以人們拉動而不是推送新版本。拉是選擇和這些組件應該簽入和版本控制在消費項目內的。這與真正的第三方裝配沒有什麼不同,實際上你應該考慮這些。

當消費應用程序需要或帶寬升級到較新版本的內部程序集時,它們會拉動。

-1

只需將所有核心庫部署到GAC,這樣應用程序將在您更新時從GAC獲得最新版本。您可以使用命令輕鬆將GAC推送到所有「服務器/工作站」。只要記住將DLL中的所有Public方法的簽名保持不變,否則當您更改庫時(如果它們引用該方法),開發人員將會出錯(如果他們引用該方法的話)

+1

將GAC用作全能部署線束就像使用全局變量作爲全部狀態管理一樣。另外,這並不能解決源代碼*中相互引用項目的問題,它只是引入了一個外部手動步驟,開發人員必須在代碼甚至編譯之前在他的工作站上安裝更多的東西。 – David 2014-09-11 12:24:31

+0

請不要這樣做。將公共庫DLL部署到每個人都可以參考的共享網絡位置。或者,如果您關心版本控制,請部署本地NuGet存儲庫並將功能包裝在一個包中。您將在GAC中創建的泥球將無法管理。 – Adrian 2016-06-21 17:05:33

相關問題