2009-01-20 130 views
0

UPDATE之間共享。我們發現,如果使用Visual Studio將解決方案添加到存儲庫(使用將解決方案添加到源代碼管理),一切都很順利......去圖。Perforce的,項目中的多個解決方案


因此,我們將我們的VSS庫(如果它可以被稱爲是),以Perforce的,我們正在運行到問題與包含在多個解決方案的項目。

我們的倉庫可能是這樣的......

  • //車廠
    • DevMain
      • 解決方法1
        • PROJECT1(構建一個DLL)
      • 溶液2(已有PROJECT1作爲項目​​參考)
        • Project2的
      • Solution3(具有PROJECT1作爲項目​​參考)
        • 項目3

當在Visual Studio for Solution2中使用集成的源代碼管理時,它會抱怨項目不在當前的解決方案文件夾下,我們可能需要移動它。因爲多個解決方案參考項目1,我們決不能組織它,一個解決方案不會抱怨...

將Project1構建到DLL並將其存儲在Lib文件夾中是最佳實踐嗎?或者,還有更好的方法?

謝謝。

回答

0

解決方案應該是每次將其添加到新項目時將Solution1重新綁定到源代碼管理服務器。 (它位於文件 - >源代碼管理 - >更改源代碼管理下)。

這應該只需要在每個解決方案的桌面上執行一次。

+0

我想這個......我進入我的P4信息重新綁定項目,之後我得到一個彈出窗口說明e ver有用的「未指定的錯誤」。綁定永遠不需要... 另外...它似乎並沒有像這個解決方案的規模很好......每個開發人員都必須通過這種儀式爲每個解決方案? – 2009-01-20 20:34:22

0

我對使用Visual Studio與Perforce不太瞭解,但可以考慮創建工作空間視圖,將Project1映射到Solution2,Solution3等需要的地方。

0

如果我理解正確,您希望您的文件在磁盤上的存儲方式與存儲在Perforce中的方式不同。如果是這種情況,並且你不能簡單地重新定義VS中的引用,那麼設計巧妙的客戶端就可以實現這一點。

Client: Client_Solution2 

Description: 
Created by Me. 

Root: C:/Development/Solutions 

View: 
//depot/Devmain/Solution1/... //Client_Solution2/Solution2/Solution1/... 
    //depot/Devmain/Solution2/... //Client_Solution2/Solution2/... 

這會給你一個結構,其中解決方法1是2

1

我們也有類似的問題,並正在接近它很像@Toby艾倫在他的回答中提到的解決方案子目錄,通過客戶端規格。然而,隨着時間的推移,這變得非常痛苦(隨着客戶端規格變得越來越複雜,建立一個新的團隊成員變得越來越困難;自動化也變得更加複雜,因爲事情是......「不斷變化的」:-))。

最終,我們演變爲使用目錄結構和分支的戰略。目錄結構如下:

//depot 
    /products 
     /(product_name) 
      /doc 
      /lib 
       /(3rd_party_libname) 
        (DLLs) 
       /(another_3rd_party_libname) 
        (DLLs) 
      /src 
       /Project1 
        (files, csproj, vbproj, etc) 
       /Project2 
        (files, csproj, vbproj, etc) 
       /Project3 
        (files, csproj, vbproj, etc) 
      Solution1.sln (includes src/Project1) 
      Solution2.sln (includes src/Project1, src/Project2) 
      Solution3.sln (includes src/Project1, src/Project3) 
     /(another_product_name) 
      /doc 
      /lib 
      /src 
      (solutions) 
    /shared 
     /(shared_lib_name) 
      /doc 
      /lib 
      /src 
      (solutions) 
     /(another_shared_lib_name) 
      /doc 
      /lib 
      /src 
      (solutions) 

請注意,在整個結構(doc/lib/src/solutions)中重複使用相同的結構。 Lib包含「外部」庫 - 包含在項目引用中的第三方庫。 Src包含屬於特定產品一部分的所有項目的平面清單。解決方案然後用於以多種方式「合併」項目。我認爲src目錄是一個容器,裏面有「可用的東西」,然後解決方案從這個容器中挑選併合並項目(根據需要)。

多個產品共享的庫進入共享目錄。一旦進入共享目錄,它們將被視爲與產品無關 - 它們有自己的發佈週期,並且不會以源代碼的形式加入產品。通過將共享庫發佈程序集/程序集分支到產品的lib目錄 - >從產品角度看,共享庫被拉入產品中,第三方庫和共享庫沒有區別。這允許我們控制什麼產品使用什麼版本的共享庫(當產品需要新功能時,它必須明確地分支到更新版本的共享庫,就像它將包含第三方庫的新版本一樣,與所有優點和缺點一起去)。

總之,我們的結構具有共享庫的兩個「類型」的概念:

  • 項目本地的產品,通過多種解決方案(包括在在src目錄下,多個解決方案項目的平面列表使用可以引用它們)由多個產品使用
  • 項目(添加到共享目錄下,與版本的第三方庫處理從產品獨立的)
相關問題