我们正在开展一个大型项目。该项目有多个外部站点和多个内部站点都存储在Subversion中。
外部网站允许客户提出我们提供的各种事物的请求,支付水电费等。我们决定将这些功能分开,因为大多数工作与其他功能完全不同。因此,这是一个Visual Studio解决方案,其中WebUI和数据库层分为两个项目。例如,公用事业计费有一个Utility.WebUI项目和一个Utility.Domain项目。所有数据库/业务逻辑都保存在域项目中。
内部站点填补了后台系统(IBM i)和Web数据库之间的空白。还将取代/增强我们的一些旧RPG程序。从理论上讲,它们应该使用外部站点使用的完全相同的数据库逻辑,因为它们可以访问同一个数据库吗?从不同的解决方案中引用这些项目的最佳方法是什么?我应该只添加对dll的引用,还是应该将该项目从外部应用程序解决方案导入内部应用程序解决方案?
这归结为我们有两个开发人员在这个项目上工作。我自己,我做了大部分的后端编码。另一个开发人员完成大部分GUI编码。因此,我们需要确保此项目适用于多个工作站。
这有意义吗?有什么想法吗?
答案 0 :(得分:1)
使用svn:externals属性将共享项目引用到项目中。
您必须在1)引用包含共享项目源代码的目录(即csproj和cs文件所在的位置)或2)引用包含共享项目的构建输出(程序集/ dll)的目录。
我通常更喜欢方法1),因为它更容易修改共享项目的源代码(您无需在Visual Studio的第二个实例中打开共享项目的解决方案即可进行更改)。如果您不打算经常对共享项目进行更改,那么方法2)可能会更好。它减少了编译时间并防止意外修改共享项目的源代码。两种方法都很好 - 味道很重要。
建议您对共享项目进行版本化的两种方法。即使用版本号创建标签并引用标签,而不是主干。当新版本的共享项目出现时,您可以使用新版本号更新其他项目的svn:externals属性,运行“svn update”以下载新版本的共享项目,然后重新编译。如果你有一个为你自动标记的共享项目的构建服务器,这种方法尤其有用。
答案 1 :(得分:0)
我认为你可以使用一种包含常见项目的“公共”解决方案,然后使用SVN外部指向SVN主干中的项目文件夹,在主要解决方案中引用这些项目。
Commons SVN存储库必须遵循建议的存储库结构(trunk,branches,tags)才能拥有稳定的公共项目。
在这种情况下,您可以考虑使用依赖关系管理工具,例如NPanday或NDepend,您必须在其中声明每个项目所依赖的程序集的版本;使用这些工具,您可以使用二进制程序集的本地存储库(例如Artifactory或Nexus)来引用,或者选择使用SVN外部代码直接引用源代码。