软件包版本始终为1.0.0,带有dotnet包

时间:2017-03-14 22:48:09

标签: .net visual-studio tfs msbuild .net-core

TLDR:dotnet pack在为程序集创建nuget包时拉取版本信息在哪里?

我有一个库,我已经从.NET 4.6.1项目转换为带有project.json的.NET Core项目。对于我在此期间的CI(使用TFS 2015 vnext),我将获得我的版本号,并用新版本替换project.json文件中的版本号。 dotnet pack命令可以很好地选择版本,并创建一个包含更新版本号的新包。

上周,我从2015年TFS升级到2017年TFS。事实证明,project.json已被更新的.csproj文件取代。我已经更新了我的CI。在我的CI期间 - 我更新了我的/Properties/AssemblyInfo.cs文件,将AssemblyVersion标记替换为当前版本的版本。然后我构建了解决方案 - 构建得很好。然后我打包解决方案。

但是,尽管在AssemblyVersion中将AssemblyFileVersionAssemblyInfo.cs设置为正确的内部版本号,但dotnet pack仍在生成*.1.0.0.nupkg的.nupkg文件

我错过了什么?

这是我的包命令:

dotnet pack $projectFile -o $currentDirectory

4 个答案:

答案 0 :(得分:56)

更好的是,在dotnet pack命令中指定/p:Version=$(Build.BuildNumber)(TFS / VSTS),它将使用nuget包中的指定版本构建它。 示例(非TFS特定):

dotnet pack .\src\example\example.csproj -o c:\published\example -c Release /p:Version=1.2.3

示例(特定于TFS)< - 我们使用PowerShell脚本步骤将其用于我们的TFS 2017包装。

dotnet pack $(Build.SourcesDirectory)\src\example\example.csproj -o $(Build.ArtifactStagingDirectory)\Pack -c Release /p:Version=$(Build.BuildNumber)

注意:它不会更新包参考版本。

答案 1 :(得分:25)

当您使用dotnet pack时,会从项目定义(以前为project.json,现在为*.csproj)提取版本,而不是AssemblyInfo.cs。因此,您的新工作流程与project.json的工作流程非常相似。

project.json to csproj migration docs,您可以使用VersionPrefixVersionSuffix属性。

在:

{
  "version": "1.0.0-alpha-*"
}

现在:

<PropertyGroup>
  <VersionPrefix>1.0.0</VersionPrefix>
  <VersionSuffix>alpha</VersionSuffix>
</PropertyGroup>

您还可以使用单个Version属性,但文档警告此“可能会在打包期间覆盖版本设置”。

<PropertyGroup>
  <Version>1.0.0-alpha</Version>
</PropertyGroup>

答案 2 :(得分:2)

注意:我了解这个问题并非专门针对VSTS / Azure Dev Ops,而是在构建管道上寻求如何执行此操作的搜索,因此请添加对我有用的

  1. 使用dotnet核心任务
  2. 工具版本2。*
  3. 命令=自定义
  4. 自定义命令= pack
  5. 参数= -p:Version=1.0.$(Build.BuildId) -o $(Build.ArtifactStagingDirectory)

如果包装后的任务将推送到提要中,则-o参数是必需的(这不是为什么要构建软件包吗?)

答案 3 :(得分:1)

我尝试了许多更改目标 nuget 包版本的变体,我的同事提供的以下解决方案对我有用。 在 src 文件夹中,有一个名为“Directory.Build.props”的文件,其中版本设置如下:

  <Target Name="CustomVersion" AfterTargets="MinVer">
    <PropertyGroup>
      <FileVersion>$(MinVerMajor).$(MinVerMinor).$(MinVerPatch)</FileVersion>
      <AssemblyVersion>$(MinVerMajor).$(MinVerMinor).$(MinVerPatch)</AssemblyVersion>
    </PropertyGroup>
  </Target>

您可以将其替换为您正在尝试创建 nuget 包的版本 例如:

  <Target Name="CustomVersion" AfterTargets="MinVer">
    <PropertyGroup>
      <FileVersion>106.11.7</FileVersion>
      <AssemblyVersion>106.11.7</AssemblyVersion>
      <InformationalVersion>106.11.7</InformationalVersion>
      <PackageVersion>106.11.7</PackageVersion>
    </PropertyGroup>
  </Target>

现在,在运行 'dotnet pack -c Release -o nuget -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg' 时,将创建具有所需版本的相应 nuget 包