.net-core - 如何获得准确的 F# 版本号(例如:4.7.2,而不仅仅是 4.7)
问题描述
我们有一组 .NET Core 项目,其中一部分使用 F#。dotnet restore --locked-mode
我们希望使用该选项切换到基于锁定文件还原 NuGet 包。
但是,当我第一次生成锁定文件时,我的同事无法恢复它们。他们收到这样的消息:
C:\Program Files\dotnet\sdk\3.1.301\NuGet.targets(128,5): error NU1004: The packages lock file is inconsistent with the project dependencies so restore can't be run in locked mode. Disable the RestoreLockedMode MSBuild property or pass an explicit --force-evaluate option to run restore to update the lock file. [c:\Projects\Project.sln]
当同事重新生成锁文件(使用dotnet restore --locked-mode --force-evaluate
)时,我们发现的唯一变化是在FSharp.Core
包中,它从降级4.7.2
为4.7.1
。但是,在运行dotnet fsi
命令时,我们都只看到... F# 4.7
(而不是4.7.1
or 4.7.2
)。
我们担心这种锁定文件冲突可能会导致我们的 CI/CD 管道出现问题,其中可能安装了不同版本的 F#。是否有可能获得 F# 的确切版本号?或者,至少,从 F# Interactive 版本号推断它?例如:
Microsoft (R) F# Interactive version 10.10.0.0 for F# 4.7
Copyright (c) Microsoft Corporation. All Rights Reserved.
对比
Microsoft (R) F# Interactive version 10.9.1.0 for F# 4.7
Copyright (c) Microsoft Corporation. All Rights Reserved.
或者,是否有另一种选择如何根据提供的锁定文件强制安装特定的 F# 版本?
解决方案
您在这里混淆了两个版本:
- F# 语言的版本
- FSharp.Core 库的版本
主要/次要版本应该对齐,但是核心库有补丁,所以你总是想要最新的补丁版本。
明确指定您的 FSharp.Core 依赖项最简单,如下所示:
<PackageReference Update="FSharp.Core" Version="4.7.2" />
尽管值得一问您是否真的需要首先这样做。对于应用程序(不是 nuget 包),建议始终使用最新版本进行构建。
FSharp.Core 的版本固定在给定的 SDK 中,因此如果您从相同的 SDK 构建,它始终会恢复相同的版本。我怀疑您和您的同事如果恢复了不同的包版本,可能不会都使用相同的构建工具链。解决此问题的一种方法是使用global.json
文件来固定 SDK 版本。
推荐阅读
- javascript - 如何在本地使用 javascript 从 html5 解析 XML 文件
- python - 从包含品牌和型号名称的 Pandas 列表创建分类的 DataFrame
- powerdesigner - 当我不希望它们移动时,PowerDesigner 参考符号会自动对齐
- azure-data-factory-2 - 查看数据工厂 v2 调试运行的解决方法
- angular - 如果未选中复选框,则设置复选框验证
- com - “SafeArray 无法封送至此数组类型”错误
- c# - LINQ:用正文编写表达式以返回 IQueryable
- excel - 从方阵中选择列向量的函数
- javascript - 在 IndexedDb 中的游标外访问游标中设置的变量
- css - CSS等价于