1

我们的开发团队一直很小,直到现在,他们都致力于单一的 Visual Studio 2012 解决方案。我们正在成长,并希望通过为不同项目团队提供多种解决方案来实现更好的分离。

但是,在某些情况下,一个解决方案中的代码会想要利用另一个解决方案中的代码。我们决定使用内部(即私有)NuGet 包将是管理这些依赖项的好方法。

然而,关于如何处理处于不同 SDLC 阶段(例如开发、QA、暂存、生产等)的同一包的多个版本的问题出现了。

示例:如果我们有这三个解决方案...

CoreStuff
CoolProject1
CoolProject2

如果在 CoolProject1 中工作,并且我们需要使用 CoreStuff 中的代码,我们可以添加 NuGet 包。大概这个包将是 CoreStuff 的最新生产(稳定)版本。

但是,如果从事 CoolProject2 的开发人员知道 CoreStuff 中当前正在开发中的一些更改并想要使用该版本怎么办?

不确定最好的方法是为每个包创建单独的包(似乎需要根据解决方案所处的阶段来回更改包引用)或以某种方式利用同一包的多个版本(不确定这是否易于管理与 NuGet)。

有人处理这样的事情吗?

4

1 回答 1

5

首先要记住的是,NuGet 不会自动更新你的包引用,所以如果你已经将你的解决方案“链接”到最新的 CoreStuff 稳定包(比如 1.2.2),那么如果更新的包不会有任何问题提供了(不稳定的)版本(假设您正在使用的包不会从包存储库中消失)。显然,如果您升级包参考,那么您将获得不稳定的包。

因此,最简单的解决方案是确保在发布其他包之前通过 NuGet 包管理器将项目“链接”到稳定包。虽然 UI 只允许您获取最新版本,但包管理器控制台可以获取包的任何版本,因此您可以使用它来明确提供版本号,例如:

Install-Package CoreStuff -Version 1.2.2 -Project CoolProject1

如果这不是解决方案,那么还有其他几个选项可以解决此问题:

  • 给开发版本一个不同的语义版本,表明它是一个不稳定的版本,例如 1.2.3-alpha。在这种情况下,CoolProject1 可以拉入包 CoreStuff.1.2.2(它应该是您存储库中的最新稳定版本),而 CoolProject2 可以拉入 CoreStuff.1.2.3-alpha(这将是最新的不稳定版本)。
  • 拥有多个存储库,例如一个用于稳定(已发布)软件包,一个用于不稳定(开发)版本。然后,您可以从所需的存储库中选择您的包。如果你愿意,你可以这样做,这样只有你的发布过程才能将包推送到稳定的存储库,而你的 CI 构建推送到不稳定的存储库(这样你总是有最新的包可用)
  • 如果 CoolProject2 的开发者只是想针对最新版本进行开发(但会等到发布 CoreStuff v.next 之后再发布 CoolProject2),那么他可能会创建一个本地包存储库(即他的驱动器上的目录)并将那里有新的核心内容包。这样其他开发人员甚至不会看到该包。

最重要的是确保如果 CoreStuff.v-next 只是具有更高的版本号,您不会在同一个存储库中获得 CoreStuff.1.2.2 和 CoreStuff.v-next,因为在这种情况下 NuGet UI不会让您选择 v1.2.2(但包管理器控制台可以!)。

如果您想从一种包类型切换到另一种包类型,则必须进行手动更新(无论如何更改到下一个包版本时您总是必须这样做),但这并不是一件坏事,因为这会迫使开发人员至少检查包的更新不会破坏任何东西。

于 2013-06-26T01:31:23.920 回答