【问题标题】:TFS 2012 - building a web application project that references a class library in another team projectTFS 2012 - 构建一个引用另一个团队项目中的类库的 Web 应用程序项目
【发布时间】:2012-12-05 06:11:30
【问题描述】:

我无法让 TFS 2012 构建一个 Web 应用程序项目,该项目引用另一个团队项目中的类库项目。

以下是项目在源代码管理中的外观:

- $/
  - TP1
    - Development
      - Source
        - WebAppProject
  - TP2
    - Development
      - Source
        - ClassLibraryProject1

出于本示例的目的,我简化了此结构 - 每个团队项目中都有其他解决方案和项目。假设TP2 包含旨在供其他项目使用的代码,而不仅仅是TP1

包含WebAppProject 的解决方案也包含ClassLibraryProject1。它是使用 Add Existing ProjectTP1 添加的。 WebAppProject 也有一个对 ClassLibraryProject1 的项目引用。

我正在构建一个跨TP1TP2 构建项目的团队。我在TP2 中创建了构建定义并设置了以下工作区:

  • $/TP1/Development 构建代理文件夹设置为 $(SourceDir)\TP1\Development
  • $/TP2/Development 构建代理文件夹设置为 $(SourceDir)

TFS 无法构建WebAppProject,这个错误其实是有道理的……

TFS 正在尝试使用来自WebAppProject 的项目引用来解析对ClassLibraryProject1 的引用;例如:..\..\..\TP2\Development\Source\ClassLibrary1,但是,该路径显然不会存在于构建服务器上。

有没有更好的方法来做到这一点?

谢谢!

【问题讨论】:

    标签: tfsbuild


    【解决方案1】:

    做到这一点的最佳方法是设置一个工件存储库,例如 NuGet(在规模的复杂端),甚至是一个可普遍访问的网络文件夹(在规模的最基本端)。

    使用单独的构建作业/进程构建共享库并将其输出到工件存储库。

    通过工件存储库和一些“获取最新”机制(例如,NuGet get,用于 NuGet;xcopy/robocopy 批处理脚本,用于共享网络目录)在使用项目时引用它。

    直接将共享项目添加到您的解决方案中很容易导致痛苦的世界,例如如果有人在您的解决方案中意外或不知情地更改了共享项目。

    【讨论】:

    • 谢谢 chamila_c,您能否给我指出一个使用 NuGet 作为工件存储库的示例?
    • 请记住,这不是一种轻量级的方法,但肯定非常强大 - Setting up a local NuGet gallery
    猜你喜欢
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 2013-05-30
    相关资源
    最近更新 更多