我已经阅读了一些帖子(请参阅下面的参考资料),但尚未找到针对我的技术堆栈的最佳实践指南。
目标:通过 TeamCity 使用 MSBuild 和 NuGet,创建针对多个 .NET 框架的单个 NuGet 包。
约束:
- 仅从 VCS 中提取代码一次。
- 所有编译的程序集的版本应该相同。
- 单个 .csproj(不是每个目标框架一个)。
我有两种方法:
创建单个构建配置。它将包含三个构建步骤:编译 .NET 3.5、编译 .NET 4.0、使用 NuGet 打包。每个构建步骤都将取决于最后一步的成功。我在这种方法中看到的唯一真正问题(希望有一个我不知道的解决方案)是每个构建步骤都需要自己的一组构建参数(例如,system.TargetFrameworkVersion 和 system.OutputPath)来指定DLL 所在的唯一位置(例如 bin\release\v3.5 和 bin\release\v4.0),以便 NuGet 打包步骤能够根据 .nuspec 文件中的 Files 部分执行其操作。
创建多个构建配置。每个上述构建步骤的一个构建配置。使用这种方法,很容易解决 TargetFrameworkVersion 和 OutputPath 构建参数问题,但我现在必须创建快照依赖项并在构建之间共享程序集版本号。它还占用了构建配置槽,这对我们来说是可以的(但不是最佳的),因为我们确实有企业许可证。
选项#1 似乎是显而易见的选择。选项#2 感觉很脏。
所以我的两个问题是:
- 是否可以创建构建步骤独有的参数?
- 有第三种更好的方法吗?
参考:
- 多框架 NuGet 构建,带有用于内部依赖管理的符号
- Nuget - 用多个项目打包一个解决方案(针对多个框架)
- http://lostechies.com/joshuaflanagan/2011/06/23/tips-for-building-nuget-packages/
- http://msdn.microsoft.com/en-us/library/hh264223.aspx
- https://stackoverflow.com/a/1083362/607701
- http://confluence.jetbrains.com/display/TCD7/Configuring+Build+Parameters
- http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package