2013-05-31 130 views
6

我正在将NuGet引入到我们的软件开发过程中,既用于外部二进制文件(例如Moq,NUnit),也用于包含共享功能的内部库项目。项目引用v NuGet依赖关系

TeamCity正在从我们的内部库项目生成NuGet包,并将它们发布到本地存储库。我修改的解决方案文件使用本地存储库访问NuGet包。

考虑下面的源代码解决方案:

  1. Company.Interfaces.sln建立Company.Interfaces.1.2.3.7654.nupkg
  2. Company.Common.sln含有经由其NuGet包的引用Company.Interfaces,并建立Company.Common.1.1.1.7655.nupkg,与Company.Interfaces.1.2.3.7654包括作为依赖性。
  3. Company.DataAccess.sln使用Company.Common nupkg添加 Company.Interfaces和Company.Common作为参考。它建立了 Company.DataAccess.1.0.8.7660.nupkg,包括Company.Common.1.1.1.7655作为相关组件。
  4. Company.Product.A是一个网站解决方案,它包含对所有三个库项目的引用(通过选择 Company.DataAccess NuGet包添加)。

问题:

如果有一个源代码改变Company.Interfaces,我总是需要重新编号并重建中间包(Company.Common和Company.DataAccess)和更新包在Company.Product.A?

或者不依赖于是否源代码改变是

  • 一个bug修复,或
  • 一个新的功能,或
  • 重大更改?

实际上,我有8个级别的依赖库包。是否有工具支持更新整个软件包树,如果有必要?

我知道语义版本。

我们使用VS2012,C#4.0,TeamCity 7.1.5。

回答

1

我们在基础项目上编写了我们自己的构建配置(将为Company.Interfaces。sln在这种情况下)一次建立和更新整棵树。它沿途检查更新的packages.config文件和.nuspec文件。我不能说这会节省多少时间,即使它在开始时听起来可能过于夸张。

需要注意的一件事:我们编写的脚本会检查文件,即使链条在两者之间出现故障,也会给我们在本地机器上修复它的机会,检查修复并重新启动发布。

+1

你的意思是这样吗? http://candordeveloper.com/2012/12/12/nuget-package-build-a-solution-of-projects/ –

+0

我们的NuSpec文件仍然是手工编辑,不幸的是,有一些宏用于自动版本替换。我的意思是自动触发相关的构建配置,更新NuGet包,检入结果的变化(通常为.csproj和packages.config文件),并继续链,直到叶项目。 –