库不能直接使用其编译目标中缺少的 API。 FSharp.Core 11 添加了一个 net10.0 构建版本,与 netstandard2.0 和 netstandard2.1 并存,因此它可以使用新式 .NET API,而无需放弃对较旧目标框架的支持。
特定于目标的 API 和行为
构建版本可以公开不同的 API 和实现。 目标选择决策显式选择现代目标;它不会自动遵循编译器的开发目标。
项目使用的构建版本
NuGet 为每个项目目标选择最接近的兼容资产。 .NET 10 及更高版本的项目可以选择 lib/net10.0/FSharp.Core.dll;较旧的兼容目标则选择 .NET Standard 资产。
诊断可用情况:
- 检查解析的 FSharp.Core 包版本。
- 检查
obj/project.assets.json中所选的编译和运行时资产。 - 检查执行应用程序的运行时,而不仅仅是其引用程序集。
<LangVersion>preview</LangVersion> 用于启用编译器行为。 它不会补充缺失的 Core 成员,也不会选择其他包资产或提供运行时支持。
差异示例
| Area | Core 11 中的可用性 |
|---|---|
| ValueTask 帮助程序和相关重载 | 可用于netstandard2.1和net10.0,而不适用于netstandard2.0。 |
边界保留 Array2D.map、 mapi和 copy |
net10.0 构建版本使用较新的 .NET 分配 API;.NET Standard 版本保留其回退方案。 |
| 运行时-异步返回内在函数 | 由 net10.0 构建公开;编译器、语言、引用和运行时要求 也适用。 |
有关详细信息,请参阅 Async 和任务函数 以及 Array2D 和 Native AOT。 普通异步/任务帮助程序和 print/printn 可在所有三个版本中使用。
F# 交互式和异步处置
F# 任务表达式已支持在兼容的已编译项目中的 IAsyncDisposable 资源。
F# 11 打包修补程序为 F# Interactive 提供现代化的 Core 构建版本,因此等效的use和use!代码也可以在那里运行。 更新工具集,而不仅仅是应用程序的包引用。
运行时异步是单独的运行时约定
核心版本 net10.0 的目标不提供运行时异步支持。 遵循 运行时异步试验中的单独编译器、引用和运行时要求。