将预发行版本注入CSPROJ NuPkg一代

时间:2018-06-26 13:29:52

标签: msbuild visual-studio-2017 nuget-package azure-pipelines-build-task azure-artifacts

我正在使用Visual Studio 2017中引入的新CSPROJ架构。 另外,我用它为我的程序集创建一个NuPkg。

<PropertyGroup>
  <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
  <PackageId>MyComponent</PackageId>
  <Version>2.1.0</Version>
 .
 .
 .
</PropertyGroup>

我正在使用VSTS来构建我的解决方案,并且我想使用该构建来通过向标签添加预发布标记来​​控制包装质量。像这样:

  <Version>2.1.0$(VERSIONSUFFIX)</Version>

产生包名称,例如:

  • MyComponent.2.1.0-alpha-12345.nupkg
  • MyComponent.2.1.0-beta-67890.nupkg
  • MyComponent.2.1.0.nupkg

这行得通,但是我发现了一个讨厌的副作用-如果我在Visual Studio中以交互方式编辑版本号,它将剥离$(VERSIONSUFFIX)占位符。更新版本号的唯一方法是直接编辑CSPROJ。

是否有更好的方法来允许版本控制NuPkg的生成?

谢谢

-约翰

2 个答案:

答案 0 :(得分:0)

编辑者将始终更改Version并删除所有自定义项。

新SDK的建议方法是在内部版本中设置VersionPrefix,并将VersionSuffix(如果已设置)附加到其后。

所以你会

<VersionPrefix>1.2.3</VersionPrefix>

,并且可以使用-p:VersionSuffix=beta-123进行构建以生成1.2.3-beta-123.nupkg文件。 但是以任何方式都无法在VS属性中进行编辑。

答案 1 :(得分:0)

您可以根据需要使用构建变量在NuGet pack任务中指定软件包版本和前缀版本。

如果要使用程序集版本作为软件包版本,并根据需要更改前缀版本,则可以使用以下步骤:

1。获取程序集版本

您可以添加任务Assembly Info Reader,然后可以通过变量$(ASSEMBLYINFO.ASSEMBLYVERSION)获取程序集版本。

2。根据需要定义软件包版本和前缀版本

您可以在构建定义中定义变量以仅指定前缀版本。例如带有前缀部分ver的变量beta-1.1

enter image description here

添加一个PowerShell任务以将$(ASSEMBLYINFO.ASSEMBLYVERSION)和前缀版本组合在一起以打包nuget程序包。 PowerShell脚本可以是:

Write-Host "##vso[task.setvariable variable=ver]$(ASSEMBLYINFO.ASSEMBLYVERSION)-$(ver)"

因此变量$(ver)包含带有前缀版本的版本。

3。为要打包的软件包指定带前缀的已定义版本

在NuGet打包任务中,选择“使用环境变量进行自动软件包版本控制”选项,然后将ver指定为环境变量。

enter image description here

然后打包的软件包将以MyComponent.2.1.0-beta-1.1.nupkg等格式显示。