【问题标题】:Get latest solution file or solution folder (complex dependencies )?获取最新的解决方案文件或解决方案文件夹(复杂的依赖项)?
【发布时间】:2014-06-15 01:09:05
【问题描述】:

我大部分时间都看到开发人员如何在解决方案上工作,右键单击源代码管理中的解决方案文件夹,选择“获取最新”并且...有很多问题:解决方案的项目引用其他项目的其他项目解决方案、缺少的参考资料等...

这是我们在工作中遇到的类似情况的模拟示例...

现在,假设您必须在 TicketsSolution 上工作,特别是 - 修复一些错误,使用 TicketsSolution 的 Web 项目进行更改。通常开发人员在 TFS/VSS(随便)中右键单击 TicketsSolution 的文件夹并选择“获取最新”... 上面提到的问题直接打到了他们的脸上。

事实证明,TicketSolution 还包括诸如

之类的项目

Common.Solution1.Project1,可能有对Common.Solution2.Project1的引用

Common.Solution1.Project2

WCFServicesLibrary 项目,可能有对 SQLServerProxy 项目的引用

此外,一些外部 3rd Patry DLL 已丢失或放置在 ROOT 下但在 TicketsSolution 文件夹之外的某处...

在这种情况下,当您仅为 TicketsSolution 文件夹获取最新信息时,所有这些引用都将丢失,

因此,获取最新信息的唯一合理方法似乎是右键单击解决方案文件,例如 TicketsSolution.sln 并仅获取该文件的最新信息.然后,希望在 Visual Studio 中打开该 TicketsSolution.sln 文件 :) 重建解决方案所需的解决方案文件夹内外的所有树节点。

即使在这种方法中,对外部 DLL 库的引用也会丢失,因为 VS 知道如何重建文件夹树,但它不包括在 TicketsSolution 文件夹之外引用的 DLL。

但 90% 的开发人员获得了最新的解决方案文件夹并遇到大量问题。

所以,我的问题是 - 在这种情况下,在 TicketsSolution 解决方案中包含外部项目是否正确,或者在 TicketsSolution 文件夹下添加“lib”文件夹并删除所有这些外部依赖项目的 dll 会更合理在其中,然后从解决方案的项目中引用它们,而不是使用上层的所有依赖项目重建整个文件夹树(可能并且可能会有自己的依赖关系和引用问题)??

【问题讨论】:

  • 永远不要在您的解决方案中打开另一个解决方案项目。这是非常糟糕的做法,应该避免。将每个解决方案视为应用程序,将外部的任何内容视为二进制依赖关系。
  • @MrHinsh,完全同意。问题是我加入的公司已经处于这种状态。并且所有这些外部项目,在这个解决方案之外也被其他项目以同样的方式引用,它们就像几个解决方案的“共同”。

标签: visual-studio version-control tfs


【解决方案1】:

Lib 文件夹使生活更简单,但在构建层次结构中引入了其他问题。 另外,您必须将库存储在源代码管理中,这对某些人来说是不行的。

我使用本地 NuGet 提要。

我认为对您的问题最简单的答案是创建一个 .bat 文件,为您需要签出解决方案的文件夹编写签出调用,并将其存储在 TFS 上的解决方案根文件夹中。

让开发人员单击 bat 文件以获取解决方案的所有文件的最新信息。

【讨论】:

  • 这是此问题的正确且唯一的解决方案。将您的依赖项打包为 nuget 包,其他解决方案使用它
  • @MrHinsh,是的,我同意,只是我无法制定如何组织他们的 TFS 存储的规则,它非常庞大,而且我在这里签订了合同 :) 除了他们“有点“落后于使用 Nuget :) 我本可以建议所有那些引用的外部项目编译成 DLL 并将这些 DLL 放入解决方案内的 Lib 文件夹中,并从该解决方案中完全删除这些外部项目,只留下属于解决方案一部分的项目(在解决方案的文件夹内)。
猜你喜欢
  • 2014-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-10
相关资源
最近更新 更多