【问题标题】:VS - Managing References Across ProjectsVS - 跨项目管理引用
【发布时间】:2013-01-25 21:36:00
【问题描述】:

我的问题是我有一个包含多个项目的 Visual Studio (2010) C# 解决方案,并且尝试为每个项目管理库是一场噩梦。这些项目中的每一个都包含一些标准库引用(都是预构建的)。

例如:

Class Lib Project 1: A.dll, B.dll, C.dll
Class Lib Project 2: A.dll, B.dll, D.dll

所以在这种情况下,我有来自特定共享驱动器的 A.dll 和 B.dll 引用。但是,A.dll 和 B.dll 的每个新版本都会进入一个单独的文件夹。因此,如果我想升级到 A.dll 和 B.dll 的最新库版本,我必须将两个项目中的引用更改为新位置。

现在,如果只是 2 个项目,没什么大不了的。但是,如果我们说 10+,那么它就会变得有问题、耗时且容易出错。因为这是一个公司范围的流程,所以我不能像目录链接一样为将复制最新库构建的静态位置创建(有时我不想自动升级)。

有谁知道我可以以某种方式在同一个解决方案下集中跨项目的库引用(我不需要跨解决方案)?

【问题讨论】:

  • NuGet 非常适合这个..
  • 我们在几年前就反对过(TFS2005 刚刚推出,全新),并决定转储 TFS 并转到 SubVersion 进行源代码控制。我们获得了以更容易的方式组织项目的灵活性,但我们失去了所有强大的集成项目管理。我非常想念那部分。我祝你好运,并希望你比我们有更好的运气。如果您确实接受了这里的建议,请通过单击复选标记接受答案,并就它如何为您工作发表评论。如果现在解决了这个问题,我想再试一次 TFS。
  • 其他人在下面提供了其他信息,但在共享上添加对未版本控制文件的引用永远不起作用。对单独目录中的 .dll 文件进行版本控制是正确的解决方案。对于依赖于同一解决方案中的许多其他 .dll 项目的中心项目,将项目引用添加到主项目中,并且 .dll 文件将包含在主项目中。您可能还需要设置构建顺序。

标签: c# visual-studio-2010 csproj


【解决方案1】:

我假设您正在使用源代码管理?将您的引用(二进制文件)添加到您的解决方案中,并将它们与源代码一起保存在本地。

通过将所有内容放在一起,您始终可以返回到源的特定版本并能够构建它,而不必担心您当时使用的是什么二进制文件。

此外,这允许您更新二进制文件一次 - 然后所有开发人员只要执行“获取”就可以下载最新的。

编辑:如果您这样做,您也可以只保留一份 dll 副本,供您的解决方案中的多个项目引用。

【讨论】:

  • 这是一个有趣的解决方案,虽然我不确定我是否要签入二进制文件,但它会起作用。
  • @Amicus - 您想要签入二进制文件的原因是能够转到源历史记录中的任何点,进行“获取”,并能够进行完整的构建。否则,您必须记住您在特定时间点使用的二进制文件。
  • 我明白其中的逻辑。我想我从来没有听说过其他人将二进制库签入源代码控制,所以对我来说似乎有点陌生。我将把它标记为答案,因为这是第一个建议并且不需要任何扩展。
  • @Amicus - 一切都与可重复性有关。也许我们应该将其称为版本控制而不是源代码控制:)
【解决方案2】:

当我处理复杂项目时(读取包含 10 多个项目的解决方案以某种方式交叉依赖),通常我会在解决方案根目录中创建一个 DLL 文件夹,其中存储解决方案项目中使用的所有 dll。

我从每个项目中添加来自 del 这些 DLL 的引用,copy local 选项仅适用于可运行项目(Web 应用程序、控制台...)

这样如果我想升级 A.dll 我只能在 common DLLs 文件夹中更新并重建解决方案

- solution
 |-DLLs
 |  |- A.Dll
 |  |- B.Dll
 |  |- C.Dll
 |  |- D.Dll
 |- prj1
 |  |- References
 |  |   |- A.Dll
 |  |   |- B.Dll
 |  ...
 |- prj2
 |  |- References
 |  |   |- A.Dll
 |  |   |- B.Dll
 |  |   |- C.Dll
 |  ...
 |- prj3
 |  |- References
 |  |   |- B.Dll
 |  |   |- D.Dll
 |  ...

通常,libs dll(A.dll、B.dll、...)的更新是通过脚本(.bat 或 .ps1)完成的,因此在某种程度上是自动的,但需要手动触发。无论如何都可以通过预构建操作自动触发此操作

我们仅将 Nuget 用于社区库,虽然有可能有一个 private nuget repository,但这对环境来说太多了。

【讨论】:

    【解决方案3】:

    NuGet 是要走的路。您仍然需要为每个项目管理它们(每个项目的packages.config),但它为您提供了一个很好的GUI,可以在解决方案级别工作,它会为您批量更新项目。更多细节在这里:http://frozenorange.wordpress.com/2011/10/12/managing-nuget-at-the-visual-studio-solution-level/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-06
      • 2010-12-14
      • 2016-05-30
      相关资源
      最近更新 更多