各种MSBuild版本属性(例如Version,VersionPrefix和VersionSuffix)之间有什么区别?

时间:2017-02-12 01:33:26

标签: c# .net msbuild

使用MSBuild 15和Microsoft.NET.Sdk构建项目允许用户指定六个版本属性。每种方法之间的区别是什么,以及使用它们的正确方法是什么?

  • VersionPrefix
  • VersionSuffix
  • 的AssemblyVersion
  • 文件版本
  • PackageVersion

要明确的是,我在谈论“属性”作为文件中定义的MSBuild属性(如下所示)

<PropertyGroup>
   <Version>1.2.0</Version>
</PropertyGroup>

...或命令行为msbuild.exe /p:Version=1.2.0

1 个答案:

答案 0 :(得分:36)

此外,显式设置这些值将覆盖默认值。

<强> VersionPrefix

格式: major.minor.patch

示例: 14.2.4,0.1.0,99.99.99

含义:semver版本号的正常部分。这用于确定版本值的开头。

默认值:“1.0.0”

<强> VersionSuffix

格式:[0-9A-Za-z - ] *(任意字符串)

示例:alpha,beta,build0123,rc4-build201701

含义:版本号的预发布标签。用于确定版本值的结尾。

默认 :(空)

版本

格式: major.minor.patch [-prerelease]

示例:5.3.9-beta,0.0.1-alpha-01,2.0.0

含义:此属性是用户项目中最常用的属性。其他版本属性将此值视为默认值。它还用于生成System.Reflection.AssemblyInformationalVersionAttribute的值。预发布值是可选的。

默认值: VersionPrefix 如果VersionSuffix为空。 VersionPrefix-VersionSuffix 如果VersionSuffix 为空。

注意:明确设置版本会覆盖任何 VersionPrefix VersionSuffix 设置。

此外,这通常遵循SemVer 1.0.0规则。请参阅http://semver.org/spec/v1.0.0.html

<强> PackageVersion

格式: major.minor.patch [-prerelease]

含义:用于在从MSBuild项目生成NuGet包时生成包版本。

默认:匹配版本

<强>的AssemblyVersion

格式: major.minor.patch.revision

示例: 4.5.6.2,1.0.0.0

含义:用于生成System.Reflection.AssemblyVersionAttribute的值。编译器使用它来确定最终的AssemblyVersion值,这是程序集标识的一个重要部分。见https://msdn.microsoft.com/en-us/library/51ket42z(v=vs.110).aspx#Anchor_0

默认:匹配没有预发布标签的版本

<强>文件版本

格式 major.minor.patch.buildnumber

示例:1.0.0.43952,0.1.0.0

含义:用于生成System.Reflection.AssemblyFileVersionAttribute的值。这与AssemblyVersion不匹配。通常会在此版本中添加内部版本号。

默认:匹配 AssemblyVersion

<强> InformationalVersion

格式:任何

含义:用于生成System.Reflection.AssemblyInformationalVersionAttribute的值。此属性可以包含任何其他版本信息。

默认:匹配版本