使用.NET Framework库,您可以指定带通配符的版本,NUGET pack命令会在VSTS中运行NUGET构建任务时自动附加构建日期和版本。
[assembly: AssemblyVersion("1.0.*")]
NUGET PACK将生成一个NUPKG文件,其中包含1.0.6604.1234
之类的版本,附加日期编号和构建ID。
在.NET Core和.NET标准中,新的.csproj
格式不支持此通配符格式。
我们无法使用Nuget.exe打包(原因:this issue)但我们可以使用dotnet pack
,但我需要自动增加内部版本号。 VSTS中的dotnet
构建任务允许我完全替换版本号,但我想保留csproj文件中的版本,只需附加一个内部版本号(就像我以前一样)。
我发现在csproj文件中使用<VersionPrefix>x.y</VersionPrefix>
可以使用nuget pack
,然后我可以将其他参数VersionSuffix=$(Build.BuildNumber)
添加到pack任务中。
在项目属性对话框中第一个dev更新项目版本之前,所有内容都很好看。 Visual Studio忽略了VersionPrefix并设置了<Version>
标记 - 并且忽略了内部版本号修复,因为存在Version
标记。
有没有办法从csproj中读取Version
?如果是这样,我可以将构建属性设置为Version=$(ProjectVersion).$(Build.BuildNumber)
?
或者是否有其他方法可以在打包时处理自动递增构建版本?
答案 0 :(得分:4)
首先,您可以为自动包版本控制选择Use an environment variable
,将您定义的变量(例如temp
($(build.buildNumber)
)用作环境变量强>
更多详情请看这个链接:Dotnet pack automatic package versioning build number clarification
另一种方法是使用&#34;参数&#34;在dotnet CLI任务中,您可以将其他参数传递给dotnet cli。
使用
--version-suffix $(Build.BuildNumber)
将传递构建 数字作为版本后缀。确保你没有<version>
csproj中的元素集,而不是<versionprefix>
元素。 内置版本看起来像versionprefix-versionsuffix
,所以 例如,如果您有<versionprefix>1.2.3</versionprefix>
并构建 编号201805002
,内置版本为1.2.3-201805002
。在这种情况下,请不要选择自动包版本控制。
答案 1 :(得分:2)
感谢@ patricklu-msft的建议。
似乎没有内置的方法来模拟我们之前使用NUGET pack
dotnet pack
的通配符行为,也没有办法从项目文件中获取<Version>
标记
所以我在MarketPlace中创建了一个新的VSTS Build任务:VersionTaskReader。
此扩展程序可以指向.csproj
或.vbproj
,并会设置一个环境变量VERSION
,并VERSION_BUILD
附加BUILDID
。您可以选择添加前缀,以便在需要时使每个实例不同。
例如,如果您的项目包含<Version>1.1</Version>
,则VERSION_BUILD
将类似于1.1.8680
然后dotnet pack
任务可以在版本控制选项屏幕中使用环境变量VERSION_BUILD
,以便内部版本号自动递增。