【发布时间】:2018-08-23 08:58:30
【问题描述】:
需要以下建议:
在我的公司中,我正在开发供外部利益相关者使用的 .NET 类库,并在利益相关者可以访问的私有 NuGet 源上共享它们。
这些库依赖于一个核心库,如下所示。目前,我在一个 VS 解决方案中维护这些库,显然是在一个 Git 存储库中。我正在关注 SemVer 对它们进行版本控制。
CoreLibrary
CoreLibrary.Extension1 (references CoreLibrary as project reference)
CoreLibrary.Extension2 (references CoreLibrary as project reference)
...
There might be more of these extension libraries in the near future
到目前为止,我一直在 Visual Studio 中手动对它们进行版本控制(每当我需要升级版本时,在 AssemblyInfo.cs 中手动设置正确的值),并在每个项目中使用批处理文件来打包并将特定库推送到NuGet。
但现在我最近开始研究 VSTS,我的下一个任务是尽可能地自动化构建和发布,包括自动版本控制。我偶然发现了 GitVersion,我认为它对最后一部分有很大帮助。
但是,这里是但是。如果我理解正确,GitVersion 在存储库级别运行,因此由 GitVersion 计算的给定 semver 版本适用于存储库中的所有程序集/库,对吗?
那么您对这些库的发布和版本控制策略有何建议?
1) 像现在一样将所有内容保存在一个解决方案和存储库中,每当需要发布的一个包(例如 CoreLibrary.Extension1)发生更改时,这也会为所有其他库生成一个 NuGet 包。因此,如果所有包都在 1.0.0 上,并且其中一个有一点小变化,它们都会被撞到 v1.1.0 并且都被打包和推送?
2) 为每个项目创建一个 git repo,并让 GitVersion 分别在每个 repo 上发挥它的魔力。在 Extension 库中通过 NuGet 引用 CoreLibrary。
选项 2 是我认为最简洁的选项,并且具有每个项目处理版本控制和打包的优势,但在维护它们方面可能会大大增加工作量,尤其是考虑到我是这些的唯一开发人员这一事实图书馆。
你有什么想法?在给定上下文的情况下,您会选择哪个选项?我是否错过了其他可能值得考虑的选项?
设置我在自动化构建和发布方面的第一步,因此任何建议都非常受欢迎。
谢谢
【问题讨论】:
-
我想你很理解这个问题。您应该根据对您来说更重要的内容来选择解决方案。如果这不是矫枉过正,我会选择2)。但是看到你的描述,我认为应该是这样我会选择1)(即使所有程序集都在同一个nuget包中)
-
我暂时选择了选项1,如果有需要我会重新考虑选项2。感谢您的建议。
标签: git nuget azure-devops semantic-versioning gitversion