我已经阅读了一些文章(参见下文),但仍然没有找到一个特定于我的技术栈的最佳实践指南。
目标:通过使用MSBuild和NuGet,从单个.csproj文件构建针对多个.NET框架的单个NuGet包。
约束条件:
- 仅从VCS中提取代码一次。
- 所有编译的程序集应具有相同的版本号。
- 单个.csproj(而不是每个目标框架一个)。
我有两种方法:
创建单个构建配置。它将包含三个构建步骤:编译.NET 3.5,编译.NET 4.0,使用NuGet打包。每个构建步骤都取决于上一个步骤的成功。我唯一真正看到的问题(希望有解决方案,我还不知道)是,每个构建步骤都需要自己的一组构建参数(例如,system.TargetFrameworkVersion和system.OutputPath)来指定DLL所在的唯一位置(例如,bin\release\v3.5和bin\release\v4.0),以便于基于.nuspec文件中的文件部分执行NuGet打包步骤。
创建多个构建配置。每个构建配置均针对上述构建步骤。使用此方法,可以轻松解决TargetFrameworkVersion和OutputPath构建参数问题,但现在我必须创建快照依赖项并在构建之间共享程序集版本号。它还耗用了构建配置槽,这对我们来说是可以的(但不是最佳选择),因为我们拥有企业许可证。
选项#1似乎是显而易见的选择。选项#2感觉很脏。
所以我的两个问题是:
- 是否可以创建特定于构建步骤的参数?
- 是否有第三种更好的方法?
参考文献: