【问题标题】:Detect and Build Dependencies for C# Solutions检测和构建 C# 解决方案的依赖关系
【发布时间】:2014-10-23 15:09:27
【问题描述】:

我们有一个包含许多不同解决方案文件的项目,然后每个解决方案都有许多项目。问题是需要为某些解决方案构建项目。每个开发人员都必须经历打开大型解决方案(包含许多项目的解决方案)的痛苦。问题是这些解决方案并不总是构建,因为必须遵循特定的构建顺序。

我的问题是,有没有办法识别给定目录中每个项目的依赖关系,然后构建这些项目。比如找到所有对我们拥有的其他项目没有任何依赖关系的项目文件。所以先构建这样的项目,然后再构建已经构建依赖关系的项目。

我正在考虑使用 F# 或 Fake 来执行此操作,但我不确定从哪里开始,或者是否可能。

非常感谢您提供示例或链接到我可以在哪里获得帮助的答案。

问候,

纳西尔

【问题讨论】:

  • “问题是这些解决方案并不总是构建,因为必须遵循特定的构建顺序。”这应该可以在解决方案设置中修复。您可以显式设置项目依赖项以确保它们以正确的顺序构建。
  • 您可以通过在解决方案资源管理器中右键单击解决方案,选择属性然后选择项目依赖关系来控制解决方案中项目的依赖关系。但是,我一生中从未接触过它们,因为 VS 只是根据参考文献对其进行分类。
  • 谢谢大家,我明白这一切,但是项目太多了,当您尝试构建一个您已经有一段时间没有工作或对它不熟悉的解决方案时,开发人员最终会花费大量时间修复构建而不是编写代码。我很好奇是否有一种方法可以在给定文件夹中以依赖顺序自动构建所有项目。
  • @Nasir 为什么您的开发人员必须花时间修复损坏的构建,其他开发人员是否将损坏的构建提交到源代码控制?您是否尝试过像 CruiseControl.net 或 Team City 甚至基于提交的 TFS 这样的 CI 系统?如果您从源代码控制中检查解决方案,它应该只是构建,如果没有,那么您做错了。
  • @Nasir,这听起来像是一个奇怪的设置,您必须在其他解决方案的 bin 文件夹中引用二进制文件,这并不好。您至少应该有一个“引用”文件夹或类似文件夹,然后引用预构建的 DLL。我还会考虑构建 NuGet 包。如果您设置 Nuget 存储库并将项目构建到该存储库。然后 Nuget 将处理依赖关系解析,您可以使用 Visual Studio 只需单击几下鼠标即可更新到最新发布的版本。

标签: c# f# build-process build-dependencies


【解决方案1】:

如果您想使用现成的东西。来自 JetBrains 的 Resharper 有一个非常好的工具来查看项目构建依赖项。这将帮助您创建具有正确构建顺序的构建脚本。

http://www.jetbrains.com/resharper/webhelp/Architecture__Project_Dependencies_Exploration.html

【讨论】:

  • 感谢 Ryan,是的,我们确实使用了 ReSharper,我确实看过您所说的功能。正如我所提到的,一些解决方案非常大,Resharper 生成的图表实际上是不可读的,因为项目太多并且显示了相互依赖关系。但是,我确实已经确定了这一点。是的,我可以看看这个并找出问题并解决它。我写这篇文章的目的是不必解决这些问题,而是有一个脚本可以自动检测和构建依赖关系。
  • 我明白了。我有另一个想法,这又不是你想要的,但可能是一个合理的选择。使用 NuGet 来帮助管理您的依赖项是否可行?您可以让各种子项目创建 NuGet 包,以这种方式提取顶级项目。
【解决方案2】:

自己在 F# 中实现分析不会太复杂。

例如,您可以分两个阶段进行:
1. 浏览您的解决方案文件夹结构并构建(项目文件名 -> 文件的完整路径)的映射。
2. 浏览您找到的所有文件,并为每个文件将对其他解决方案项目的引用添加到图形结构中。

然后您逐步构建没有任何(尚未构建的)引用的项目。

项目文件很容易解析,是 XML。解决方案项目可以通过相对路径引用来识别:

<ProjectReference Include="..\MyProjFolder\MyProjFile.csproj">
<!--                      --^                              -->

【讨论】:

  • 感谢 Mau,这就是我在 F# 中苦苦挣扎的地方。我对 F# 很陌生,因此对如何做感到困惑。我目前正在尝试学习 F#,并将试一试,但现在 nuget 包听起来像是要走的路。
猜你喜欢
  • 2010-09-09
  • 2014-12-29
  • 2019-11-11
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 2017-02-23
  • 2018-02-10
相关资源
最近更新 更多