2

从这里获取全局配置后,我的 GitVersion.yml 如下所示

但问题是,当我运行 gitversion 时,这会引发异常

无法格式化 AssemblyInformationalVersion。检查您的格式字符串:“InformationalVersion”不是“GitVersion.SemanticVersionFormatValues”类型的成员(参数“propertyOrFieldName”)

我不得不删除第 5 行

程序集信息格式:'{InformationalVersion}'

使异常消失。

我尝试了以下但没有奏效。

assembly-informational-format: {InformationalVersion} # 删除了引号。

我错过了什么。

next-version: 0.1.0
mode: mainline
assembly-versioning-scheme: MajorMinorPatch
assembly-file-versioning-scheme: MajorMinorPatchTag
assembly-informational-format: '{InformationalVersion}'
increment: Inherit
continuous-delivery-fallback-tag: ci
tag-prefix: '[vV]'
major-version-bump-message: '\+semver:\s?(breaking|major)'
minor-version-bump-message: '\+semver:\s?(feature|minor)'
patch-version-bump-message: '\+semver:\s?(fix|patch)'
no-bump-message: '\+semver:\s?(none|skip)'
legacy-semver-padding: 4
build-metadata-padding: 4
commits-since-version-source-padding: 4
commit-message-incrementing: Enabled
commit-date-format: 'yyyy-MM-dd'
branches:
  master:
    mode: ContinuousDelivery
    tag: ''
    increment: Patch
    prevent-increment-of-merged-branch-version: true
    track-merge-target: false
    regex: ^master
    tracks-release-branches: false
    is-release-branch: false
  release:
    mode: ContinuousDelivery
    tag: beta
    increment: Patch
    prevent-increment-of-merged-branch-version: true
    track-merge-target: false
    regex: ^releases?[/-]
    tracks-release-branches: false
    is-release-branch: true
    pre-release-weight: 1000
  feature:
    mode: ContinuousDeployment
    tag: useBranchName
    increment: Inherit
    prevent-increment-of-merged-branch-version: false
    track-merge-target: false
    regex: ^features?[/-]
    tracks-release-branches: false
    is-release-branch: false
  pull-request:
    mode: ContinuousDelivery
    tag: PullRequest
    increment: Inherit
    prevent-increment-of-merged-branch-version: false
    tag-number-pattern: '[/-](?<number>\d+)[-/]'
    track-merge-target: false
    regex: ^(pull|pull\-requests|pr)[/-]
    tracks-release-branches: false
    is-release-branch: false
  hotfix:
    mode: ContinuousDelivery
    tag: beta
    increment: Patch
    prevent-increment-of-merged-branch-version: false
    track-merge-target: false
    regex: ^hotfix(es)?[/-]
    tracks-release-branches: false
    is-release-branch: false
  support:
    mode: ContinuousDelivery
    tag: ''
    increment: Patch
    prevent-increment-of-merged-branch-version: true
    track-merge-target: false
    regex: ^support[/-]
    tracks-release-branches: false
    is-release-branch: false
  develop:
    mode: ContinuousDeployment
    tag: unstable
    increment: Minor
    prevent-increment-of-merged-branch-version: false
    track-merge-target: true
    regex: ^dev(elop)?(ment)?$
    tracks-release-branches: true
    is-release-branch: false
ignore:
  sha: []
merge-message-formats: {}
4

1 回答 1

2

因此,InformationalVersion根据 指定的格式设置assembly-informational-format。所以这很可能是导致错误的原因。

例如,我所做的是这样的:

assembly-informational-format: '{MajorMinorPatch}{PreReleaseTagWithDash}+{ShortSha}'

然后,当我运行 GitVersion 时,我回来了:

"InformationalVersion":"2.0.0-convert-to-netcore.9+abc123"

同样,文档并不清楚哪些变量可以用作字符串插值的一部分,哪些变量是由各种格式字段设置的。

更新
我注意到我的回答似乎与 GitVersion 的文档相矛盾。但是,我的经验向我证明,设置会assembly-informational-format影响 的值InformationalVersion,即使它InformationalVersion被认为是一个变量并且可以用于插值。我认为这可能是 GitVersion 文档中的一个错误。或者充其量,它InformationalVersion可以用作其他格式的变量,但是因为assembly-informational-format它决定了 的最终值InformationalVersion,所以这个变量不能用于assembly-informational-format配置值。

另一个更新
好的,我意识到,虽然文档可能会更好,但我一直在误解 GitVersion 实际在做什么/提供什么。这不是魔术(嗯,它有点像;)),它确实需要你的工作。

GitVersion 只是为 SemVer 计算一些版本字段,并在您运行GitVersion.exe时(使用可执行文件时)将这些计算结果输出到 JSON 对象中。GitVersion 还提供了这些字段的一些常见“混搭”,例如MajorMinor,MajorMinorPatch等。它还您提供了一些格式化完整版本号的方法,例如assembly-file-versioning-formatassembly-informational-format。但最终,所有这些的结果都会输出到一个 JSON 对象。

您有责任从这个 JSON 对象中挑选,如何构造您的版本号因此,如果您想使用InformationalVersion基于 中指定格式的字符串作为 NuGet 包版本(用于 v3 包源)assembly-informational-format,那是您的选择。

GitVersion 提供了有关如何将此 JSON 对象“转换”为可从构建过程访问的构建变量或环境变量的说明。您可以确保将构建配置为使用这些值来实现所需的版本控制方案。但 GitVersion 仅计算主要/次要/补丁版本号并尝试帮助您格式化预发布和构建元数据标签。

这一发现无疑帮助我更好地理解了如何配置 GitVersion 并在我的构建过程中使用它。

于 2020-03-10T14:31:47.850 回答