【问题标题】:TFS and referenced assembliesTFS 和引用的程序集
【发布时间】:2011-01-17 21:54:31
【问题描述】:

我有一个使用 TFS 进行源代码控制的项目。实际上,我在一个 TFS 集合中有 2 个解决方案。假设第一个解决方案称为解决方案A,而第二个解决方案称为解决方案B。每个解决方案在 TFS 中都有自己的项目。现在我遇到的问题是,SolutionB 的项目之一应该引用在 SolutionA 中构建的程序集。那么实现这一目标的最佳实践是什么?

谢谢

【问题讨论】:

    标签: visual-studio tfs


    【解决方案1】:

    您有包含 ProjectA 的解决方案A,以及包含 ProjectB 的解决方案B:

    可用于从 ProjectB 引用 ProjectA 的两种最简单的方法是:

    • 只需将 ProjectA 添加到解决方案 B,然后 ProjectB 就可以使用对 ProjectA 的项目引用。这意味着您共享 ProjectA 的源代码,并在 SolutionB 和 SolutionA 中对其进行独立构建。这会稍微减慢您的 SolutionB 构建速度(因为您现在总是在其中构建 ProjectA),但允许您对 ProjectA 的源代码进行编辑,并将其视为 SolutionB 的正常部分。

    • 构建 SolutionA 并使用构建后步骤(或重定向输出路径)将生成的 ProjectA 程序集(以及它的 pdb 和 xml 文件,如果您希望能够对其进行调试)保存到共享文件夹(例如 C:\Libraries)。然后使用从 ProjectB 到 C:\Libraries\ProjectA.dll 的文件引用。这可以让您的 SolutionB 快速构建,并且无需保留 ProjectA 源代码,但意味着对 ProjectA 的任何更改都需要双重构建(首先是 SolutionA 创建 .dll,然后是 SolutionB 来获取对 .dll 的更改。 dll)。 (您也可以选择签入 C:\Libraries 以进行源代码控制,这样其他团队就可以为 ProjectB 提供预构建的二进制文件,而无需您自己与 SolutionA 有任何关系)

    为了澄清我所说的项目引用和文件引用的含义:在您的解决方案资源管理器中,右键单击项目的引用文件夹并选择“添加引用...”。在出现的对话框中,您可以选择“项目”选项卡以列出解决方案中的项目,并引用其中一个(项目引用)。或者选择“浏览”选项卡进行浏览以查找预构建的程序集 .dll 文件(文件引用)

    (您也可以将 ProjectA 中的程序集安装到 GAC 中,然后使用添加引用对话框从“.NET”选项卡中引用它,但恕我直言,这是一种更复杂的使用方法,因为您有更多的麻烦清理以从系统中删除 dll)

    【讨论】:

    • 谢谢杰森。我对解决方案 1 更感兴趣。比如说,如果我将 projectA 添加到解决方案 B,如果我更改解决方案 B 的 projectA,解决方案 A 的 projectA 会发生什么? :D 它们共享相同的 tfs 路径还是彼此独立?我怎样才能做到这一点?谢谢
    • 如果你应用这两种方法中的任何一种,你只有一组 ProjectA 的源代码(你只是分享构建它的结果),所以你对它所做的任何修改都是对“最初版”。唯一不共享的是两个 .sln 文件。您可以将项目放在 TFS 中您喜欢的任何位置 - 当您将每个项目添加到解决方案 B 时,您只需“浏览...”即可找到它们。
    【解决方案2】:

    有几个选项。

    1. 如果同一个团队管理这两个解决方案,我强烈建议将它们都放在同一个团队项目中,或者只是在两个项目之间共享同一个源代码库。
    2. 如果它们由不同的团队管理,那么只为解决方案 b 提供解决方案 a 的二进制副本并在 a 发布时更新它可能是有意义的。
    3. 如果这些都不起作用,您可以在解决方案 b 中添加一个自定义 msbuild 脚本,该脚本将从源代码获取解决方案 a 的最新版本并在构建 b 之前构建它。某事like this

    我个人认为,团队项目往往会被过度使用。我喜欢每个团队只有一个团队项目,并将所有代码放在存储库中。

    【讨论】:

    • 感谢布鲁克的回答。我是 tfs 的新手,不明白“共享相同的源存储库”是什么意思。您的意思是在解决方案B中添加类库项目(包含在解决方案A中)吗?它是如何实现的?再次感谢
    • @Davita:我想我用错了术语,但是当您设置团队项目时,您可以选择“新建源代码管理文件夹”或“创建新的源代码管理分支”就像“新建团队项目向导”中的第 4 步
    • 布鲁克,很抱歉告诉你 :) 但我不明白源代码控制的分支是什么意思。 :( 正如我所说,我是新手 :(
    • 假设您首先为解决方案 A 创建了团队项目 A,选择了第一个选项(新建源代码管理文件夹)。源代码管理中的路径是 $/TeamProjectA。稍后您为解决方案 B 创建了团队项目 B,但选择了第二个选项(创建新的源代码控制分支),您可以在 $/TeamProjectA/SolutionB 创建它的路径。从此时开始,当您进行构建时,您将获得 $/TeamProjectA 的最新信息,并且您将拥有所需的一切。
    【解决方案3】:

    各位,我找到了更好的解决方案。当我创建 SolutionB 时,我只需在 SolutionB 中添加 ProjectA 而不进行分支。为此,只需单击 File -> Source Control -> Add Project From Source Control。 瞧 :-)

    【讨论】:

    • 这就是我所说的 :-) ...您所描述的内容为您的解决方案添加了“项目参考”。
    • 这对于在本地使用 Visual Studio 来说效果很好,但是当你去建立一个团队时它会变得非常有趣。
    • 谢谢各位。现在它有效。和@Jason,对不起,我误解了你的帖子,我英语不流利:(
    • @Brook:我认为这在 Team Build 中应该不是问题,只要项目在同一个团队项目中(一个公共根文件夹,所有引用的相对文件路径),并且没有多个构建代理最终尝试同时构建同一个项目。
    • @Davita:没问题。我很高兴您找到了可行的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多