我们的开发团队规模相当小,到目前为止,所有人都在使用单一的Visual Studio 2012解决方案。我们正在发展,并希望通过针对不同项目团队的多种解决方案创造更好的分离。
但是,有时候一个解决方案中的代码会想要利用另一个解决方案中的代码。我们已经决定使用内部(即私有)NuGet包是管理这些依赖关系的好方法。
但是,关于如何处理处于不同SDLC阶段的相同软件包的多个版本(例如,开发,QA,分期,生产等)的问题已经出现。
示例:如果我们有这三种解决方案......
CoreStuff
CoolProject1
CoolProject2
如果在CoolProject1中工作,我们需要利用CoreStuff中的代码,我们可以添加NuGet包。据推测,这个软件包将是CoreStuff的最新生产版(稳定版)。
但是,如果在CoolProject2上工作的开发人员知道当前处于开发阶段的CoreStuff中的某些更改并希望使用该版本会怎样?
不确定最佳方法是为每个创建单独的包(似乎需要根据解决方案的阶段来回更改包引用)或以某种方式使用同一包的多个版本(不确定是否是使用NuGet轻松管理。
有人解决这样的问题吗?
答案 0 :(得分:4)
首先要记住的是NuGet不会自动更新你的软件包引用,所以如果你已经将你的解决方案“链接”到最新的CoreStuff稳定软件包(比如1.2.2)那么就不会有任何问题如果提供了更新的(不稳定)版本(假设您正在使用的软件包不会从软件包存储库中消失)。显然,如果你升级你的包参考,那么你将获得不稳定的包。
因此,最简单的解决方案是确保在将其他软件包发布之前通过NuGet软件包管理器将项目“链接”到稳定软件包。虽然UI只允许您获取最新版本,但程序包管理器控制台可以获取任何版本的程序包,因此您可以使用它来明确提供版本号,例如:
Install-Package CoreStuff -Version 1.2.2 -Project CoolProject1
如果这不是解决方案,那么还有其他几种方法可以解决这个问题:
最重要的是确保如果CoreStuff.v-next只有更高的版本号,你就不会在同一个存储库中获得CoreStuff.1.2.2和CoreStuff.v-next,因为在这种情况下NuGet UI不允许您选择v1.2.2(但是包管理器控制台会这样做!)。
如果您想要从一种包类型切换到另一种包类型,则必须进行手动更新(无论如何,在更改为下一个包版本时,您总是必须这样做),但这并不是一件坏事。迫使开发人员至少检查包的更新是否会破坏任何内容。