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
中将AssemblyFileVersion
和AssemblyInfo.cs
设置为正确的内部版本号,但dotnet pack
仍在生成*.1.0.0.nupkg
的.nupkg文件
我错过了什么?
这是我的包命令:
dotnet pack $projectFile -o $currentDirectory
答案 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,您可以使用VersionPrefix
和VersionSuffix
属性。
在:
{
"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,而是在构建管道上寻求如何执行此操作的搜索,因此请添加对我有用的
-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 包