TFS项目可以互相参考吗?

时间:2010-08-09 19:42:59

标签: .net logging tfs shared-libraries

我最近开始在企业软件环境中工作,其中有数百种不同的应用程序都局限于他们自己的“孤岛”。我的任务之一是尝试对事物进行标准化,第一次尝试将是标准事件记录。目前,该公司的“标准”是“每个人都应该使用企业库进行日志记录”。实际上,这转化为不同的开发人员在不同的项目中以不同的方式实现不同的日志记录,并且大部分时间都使用该库。

为此,我希望将“公司标准”内部开发的界面背后的实际日志工具抽象出来。我们的想法是将“标准”的重点从实施工具转移到如何使用它。然后,应用程序将使用内部库而不关心幕后工具(除了app.config部分,尽管我已经知道如何使用log4net进行抽象)。

然而,我现在面临的一个问题是所有这些应用程序都在单独的TFS项目中。如果我创建一个包含用于日志记录的公共库的项目,那么其他项目是否有任何方法可以引用它?我不想在每个项目中分发库,因为它们会很快失去同步。

如果TFS不能这样做,有没有人有任何其他建议?

5 个答案:

答案 0 :(得分:5)

杰夫的建议与我们推荐的最接近。将内部API视为一个单独的团队项目,它将其他项目作为客户端提供服务。这些项目提供了积压和发布周期。您可以根据需要拥有CI,Beta和Release版本。消费/消费者项目然后使用他们选择的构建,因为他们可以适当地适应他们自己的发布周期。因为您的TFS构建将推送到可用的放置位置,所以人们会拉动而不是推送新版本。 Pull正在选择并且这些程序集应该在消费项目中签入并受版本控制。这与你真正的第三方组装没有什么不同,事实上你应该以同样的方式考虑这些。

当消费应用程序有需要或带宽升级到较新版本的内部组件时,它们会拉动。

答案 1 :(得分:4)

TFS没有“共享”文件夹的概念(例如我们使用Visual SourceSafe)。工作区为您提供了一些灵活性,但只要您尝试将同一个“共享”文件夹映射到多个项目时就会出现故障。我们只想到几个可以解决您具体情况的选项:

  1. 将Logging项目分支到需要它的每个团队项目中。当您对Logging项目进行更改时,您需要 A)将Logging项目更改合并到已分支到的每个项目(“push”)或 B)< / strong>请求每个使用Logging更改的项目团队执行合并以获取最新更改(“pull”)。

  2. 作为Logging项目的自动构建过程的一部分,将二进制文件发布到一个众所周知的位置。让需要Logging二进制文件的每个项目都设置一个预构建事件,将最新版本的Logging二进制文件复制到他们的解决方案 - 或 - 而不是预构建事件中,您也可以使用自动化构建过程获取当前的Logging二进制文件并将其添加到解决方案中(根据需要执行check-out / ins)。

  3. 可能还有其他解决方案(通常有)但是这一切都在脑海中浮现。

    希望这有帮助。

答案 2 :(得分:0)

我们所取得的成功是创建一个单独的TFS项目,其中包含一个包含日志记录等库的项目的解决方案。构建此解决方案时,我们将程序集部署到服务器上的共享驱动器上。当我们需要使用其中一个库时,我们只需通过浏览到服务器上的位置来添加对程序集的引用。如果您需要对其中一个库进行更改,您可以随时进行更改。下一次使用该程序集的一个项目构建时,将使用新版本进行更新。

答案 3 :(得分:0)

在TFS 2018中

如果您的解决方案包含位于另一个TFS 2018项目存储库中的项目(.csproj),您仍然可以通过执行以下两个步骤来引用这些DLL:

  1. 引用包括必须相对于同一根。您的工作空间源映射必须模仿源代码管理中的相同结构。即。 (在使用项目引用的.csproj文件中)
    <ProjectReference Include="..\..\..\OtherTFSProject\src\ProjectDLL\ProjectDLL.csproj">
      <Project>{e8ed9a74-a9e9-47de-ab08-0b554a950606}</Project>
      <Name>ProjectDLL</Name>
    </ProjectReference>
  1. 在TFS2018中,当您创建构建时,必须在构建的“ 获取源文件”阶段中添加一个工作区映射,以其他TFS项目存储库。我建议您在最低的文件夹中添加映射,因为该版本将编译您选择的目录下的所有项目。在上面的示例中,您将选择
$\OtherTFSProject\src\ProjectDLL

我没有找到有关此问题的在线文档。我希望这会有所帮助!

答案 4 :(得分:-2)

只需将所有核心库部署到GAC,这样每当您更新时,应用程序都会从​​GAC获取最新信息。您可以轻松地将GAC推送到所有&#34;服务器/工作站&#34;使用命令。只记得保持DLL中所有Public方法的签名不变,否则开发人员在更改库时会出错(如果他们引用该方法)