使用 FAKE 从 TeamCity 内部版本号中提取 NuGet 包版本

Pulling NuGet package version from TeamCity build number using FAKE

我已经创建了我的构建脚本,它从我的项目中生成了一个 NuGet 包,我现在正在尝试从 TeamCity 中提取版本号,而不是在我的脚本中使用静态值。

我现在的代码是这样的(在一个Target中)

NuGet (fun p ->
    {p with
        Authors = authors
        Project = projectName
        Description = projectDescription
        OutputPath = packagingRoot
        Summary = projectSummary
        WorkingDir = packagingDir
        Version = TeamCityHelper.TeamCityBuildNumber }) "myProject.nuspec"

问题是与 FAKE returns 捆绑在一起的 TeamCity 助手是一个可选字符串而不是字符串,而 NuGet 调用需要一个字符串。

这是我第一次使用 F#,我如何才能将 TeamCityHelper.TeamCityBuildNumber 作为字符串而不是可选的,以便为 NuGet 步骤做好准备?如果 TeamCity 没有返回版本号的任何内容,我最好终止构建,但现在我只想放入一个类似“0.0.1”的占位符。

我只想创建一个像下面这样的函数,并将其放在您的 NuGet 目标之上:

let getTeamCityBuildNumberOrDefault() =
    match TeamCityHelper.TeamCityBuildNumber with
    | Some v -> v
    | None -> "0.0.1"

然后用它代替 NuGet 目标中的 TeamCityHelper.TeamCityBuildNumber

你试过类似的东西吗:

NuGet (fun p ->
    match TeamCityHelper.TeamCityBuildNumber with 
    | Some(buildNumber) ->
        {p with
            Authors = authors
            Project = projectName
            Description = projectDescription
            OutputPath = packagingRoot
            Summary = projectSummary
            WorkingDir = packagingDir
            Version = buildNumber}
    | None ->
        {p with
            Authors = authors
            Project = projectName
            Description = projectDescription
            OutputPath = packagingRoot
            Summary = projectSummary
            WorkingDir = packagingDir
            Version = "0.0.1"}) "myProject.nuspec"