2009-01-20 107 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目录下,多个解决方案项目的平面列表使用可以引用它们)由多个产品使用
  • 项目(添加到共享目录下,与版本的第三方库处理从产品独立的)
相关问题