使用新的基于 SDK 的项目系统,NuGet 和 MSBuild 被集成。目前在 VS2017 中没有此项目模板,但您可以创建一个 .NET Standard 库并将 .csproj 文件中的 <TargetFramework> 值更改为:
<TargetFramework>net462</TargetFramework>
然后你需要为你的库定义一个版本号。这可以通过设置 Versionproperty OR 来设置 VersionPrefix 和 VersionSuffix 在构建期间组合的属性的组合。对于 CI 场景,您通常只想在 .csproj 文件中的 <PropertyGroup> 元素内设置 VersionPrefix 值:
<VersionPrefix>1.2.3</VersionPrefix>
这也可以在解决方案目录中的Directory.Build.props 文件中设置,以便在一个地方为所有项目设置属性:
<Project>
<PropertyGroup>
<VersionPrefix>1.2.3</VersionPrefix>
</PropertyGroup>
</Project>
通过 CI 或本地构建时,您可以通过命令行设置 VersionSuffix 属性,dotnet cli 的 pack 命令为此提供了一个方便的选项:
dotnet pack -c Release --version-suffix SNAPSHOT
或者,通过开发人员命令提示符使用 VS 版本的 MSBuild 时,也可以实现相同的结果:
msbuild /t:Pack /p:Configuration=Release /p:VersionSuffix=SNAPSHOT
目前(VS 2017 15.2,.NET CLI 1.0.*),当有多个相互引用的项目时存在一个错误 - 依赖版本不是使用指定的版本后缀生成的。有一个解决方法:在打包之前使用相同的属性执行额外的恢复:
dotnet msbuild "/t:Pack;Restore" /p:Configuration=Release /p:VersionSuffix=SNAPSHOT
在您的 CI 系统上,您通常会使用内部版本号覆盖后缀以生成类似 1.2.3-ci-20170102 的版本,或者只生成 SNAPSHOT / PREVIEW 等软件包。
由于 msbuild 允许编写脚本,您还可以扩展 csproj 文件以在满足某些条件时自动设置版本后缀 - 例如始终为调试版本生成后缀,以免意外发布调试版本。
<VersionSuffix Condition=" '$(Configuration)' != 'Release' ">SNAPSHOT</VersionSuffix>