TFS:在两个分支之间合并 .csproj 文件,两个分支之间有项目引用

Posted

技术标签:

【中文标题】TFS:在两个分支之间合并 .csproj 文件,两个分支之间有项目引用【英文标题】:TFS: Merging .csproj files between two branches that have project references between two branches 【发布时间】:2018-11-15 00:39:49 【问题描述】:

当这些分支中的 .csproj 项目文件在其所述分支中都有其他项目引用时,我在将 dev 分支合并到主分支时遇到问题。例如,想象一下下面的 TFS 源代码控制结构:

Web 项目 1(TFS 团队项目) 开发分支 MyWebsite.csproj 总支 MyWebsite.csproj Web 项目 2(TFS 团队项目) 开发分支 MyWebsite2.csproj 总支 MyWebsite2.csproj 数据库项目(TFS 团队项目) 开发分支 MyDatabase.csproj 总支 MyDatabase.csproj 其他公共库(TFS 团队项目) 开发分支 MyClassLibrary.csproj 总支 MyClassLibrary.csproj

实际上,结构比上面要复杂一些,因为有更多的项目具有相同的分支结构,但要解决的问题是相同的。

网站项目开发分支引用数据库和公共项目开发分支,网站项目主分支引用数据库和公共项目主分支。例如,MyWebsite.csproj 文件中的引用可能是:

    <ProjectReference Include="..\..\Database Project\Dev Branch\MyDatabase.csproj">
  <Project>312ced42-f890-4d64-b27d-9ae53a42304c</Project>
  <Name>MyDatabase</Name>
</ProjectReference>

因此,您正在对 dev 分支进行更改,并且 dev 分支中的 .csproj 文件正确地引用了 dev 分支中的其他 .csproj 文件;但是当您将 dev 分支合并到主分支时,.csproj 文件正在尝试将主干分支的引用更新到 dev 分支。

解决此问题的最佳做法是什么,以便当您从 dev 合并到主干时,主干项目仍然正确引用其他主干项目并且不会更新到 dev 分支引用?

edit 正在寻找非 nuget 建议,但无法将它们组合在一个分支下,因为实际结构比上面概述的要复杂得多。在 3 个独立的 TFS 团队项目中有 3 个独立的 Web 应用程序,它们引用了其中的几个公共库,这些库也在各自的 TFS 项目中。然后每个团队项目都有 dev 和 main 分支。

【问题讨论】:

我回复了评论。寻找非 nuget 选项 是否正在定义适合您的文件类型:docs.microsoft.com/en-us/tfs/server/admin/manage-file-types? @CeceDong-MSFT 我假设您已经问过这个问题,因为您的建议是忽略 .csproj 文件类型,因此它不会合并。如果是这样,我认为这不是一个可行的选择,因为我仍然希望更新 .csproj 文件,以便在 dev 分支中添加的任何新文件都将合并到 main 中。 您可能仍需要考虑 nuget 解决方案。 【参考方案1】:

如果这些东西是单独版本的,请停止依赖项目引用。将它们转换为 NuGet 包,将它们发布到 NuGet 源,并依靠 NuGet 引用来恢复正确的版本。

如果这些东西没有单独进行版本控制,请将它们全部放在同一个分支下,并依赖不包含分支文件夹名称的项目引用的相对路径。

【讨论】:

感谢您的回复。我的想法也是一个 nuget 服务器,但对于我们的小团队来说可能太过头了,我可能无法说服我的经理,所以寻找 nuget 以外的东西。现在将它们放在同一个分支下也不可行,因为它们都位于单独的团队项目中,并且单独的 TFS 团队项目中的多个单独的 Web 项目在其他 TFS 项目中引用这些公共库。这是我来之前的结构。

以上是关于TFS:在两个分支之间合并 .csproj 文件,两个分支之间有项目引用的主要内容,如果未能解决你的问题,请参考以下文章

筛选 Visual Studio 2013 TFS 合并到仅实际更改的文件

TFS分支在两个存储库上合并

如何在 TFS 中分支和合并

如何仅合并两个变更集(TFS)

Tfs / Azure DevOps 客户端库合并 Azure DevOps 分支上的冲突解决

删除 TFS 2010 中的分支关系