如何使用 Azure Pipelines 和 F# 5

问题描述

我有一个 Xamarin.Forms 应用程序,我正在尝试使用 Azure DevOps Pipeline 构建它。该应用程序将 Fabulous F# MVU 框架用于 Xamarin.Forms,因此需要 F#。

该应用的 Android 版本在本地和管道上都可以正常编译。该应用程序的 iOS 版本在我使用 F# 5 的 Visual Studio 中本地编译得很好,但在管道中构建失败,抱怨一些语法错误。我认为这样做的原因是我需要用于 iOS 版本的 Mac 管道构建代理使用的是 F# 4.5 而不是 F# 5。我可以在管道构建日志中看到这个输出

Microsoft (R) F# Compiler version 10.2.3 for F# 4.5

示例语法错误是:

error FS1160: This token is reserved for future use

所指的保留标记是用于表示字符串插值的 $ 字符。我想这在 F# 4.5 中不是一回事。

我已尝试添加“使用 .NET Core”管道任务来尝试设置 .NET 5.x 的使用,但随后的“Xamarin.iOS”管道构建任务似乎并未对此进行处理。

如何在 Azure DevOps 管道中构建此 Xamarin.Forms iOS 应用并使其使用 F# 5?

解决方法

如何在 Azure DevOps 管道中构建此 Xamarin.Forms iOS 应用并使其使用 F# 5?

根据这个 doc,我们可以看到 SDK 5.0.202 包含 F# 5.0

并检查此 doc,我们可以看到托管代理 macos-10.15 具有 .NET SDK 5.0.202

我们需要在 Azure DevOps 管道中指定托管代理并添加任务 Use .NET Core 以安装 SDK 版本 5.0.202,然后我们可以在 Azure DevOps 管道中使用 F# 5.0

,

对于遇到类似问题的任何其他人:管道中包含一个脚本(现在仅出于历史原因,从我们使用 MacOS 10.14 构建代理映像和旧版本的应用程序开始)设置Xamarin SDK 到版本 6.8.0。禁用此脚本允许 MacOS 10.15 构建代理映像上的默认 Xamarin SDK 版本(当前为 6.12.7)接管,这解决了我的 F# 版本问题。