gpt4 book ai didi

f# - 为什么添加一些包会破坏我的代码?

转载 作者:行者123 更新时间:2023-12-01 08:49:57 29 4
gpt4 key购买 nike

我注意到添加包有时会破坏我的代码。像 Seq.replicateList.take 这样正在工作的函数会出现红色波浪线,并且程序不再运行。这是应该复制问题的详细过程(我使用的是 VS Community Edition 2017):

1) 创建一个项目。

2) Program.fs 包含代码:

[<EntryPoint>]
let main argv =
printfn "%A" argv
0 // return an integer exit code

3) 添加如下两行代码:

[<EntryPoint>]
let main argv =
let repla = Seq.replicate 10 "A"
printfn "%A" (repla |> List.ofSeq |> List.take 5)
printfn "%A" argv
0 // return an integer exit code

3) 点击Ctrl+F5,程序运行没有任何问题。

4) 右键单击​​Solution Explorer 上的References。点击Manage Nuget Packages...

5) 点击浏览

6) 搜索 Newtonsoft.Json 并安装。

7) 点击Ctrl+F5,程序运行没有任何问题。控制台打印

["A"; "A"; "A"; "A"; "A"]
[||]

8) 按照步骤 4 到 6 进行操作,并使用 Nuget 安装包 MathNet.Numerics

9) 点击Ctrl+F5,程序运行没有任何问题。控制台打印

["A"; “一个”; “一个”; “一个”; “一个”]
[||]

10) 按照步骤 4 到 6 进行操作,并使用 Nuget 安装包 MathNet.Numerics.FSharp

11) 单击 Program.fs 选项卡。可怕的红色波浪线出现在 Seq.replicateandList.take` 下。

12) 按 Ctrl+F5。将弹出一个对话框,其中包含以下消息:

There were build errors. Would you like to continue and run the last successful build?

问题:

a) 到底发生了什么?

b) 这是与 MathNet.Numerics.FSharp 中的问题或安装的特定包组合或安装顺序相关的孤立案例吗?或者这是一个普遍的问题?

c) 使用 Nuget 时是否可以避免这个问题?

d) 如果没有,是否可以通过其他方式(不是 Nuget)安装来避免这个问题?

最佳答案

MathNet.Numerics.FSharp 具有对 FSharp.Core.3.1.2.5 的依赖项,它替换了您当前版本的 FSharp.Core正在使用。相当老的3.1.2.5 缺少很多功能。

这也发生在其他流行的 F# 库中,例如 FsCheck。我通常将引用更改为最新版本的 FSharp.Core,因为它应该是向后兼容的。

为此,我卸载 F# 项目并将项目文件中的 FSharp.Core 引用更新为:

<Reference Include="FSharp.Core">
<Name>FSharp.Core</Name>
<AssemblyName>FSharp.Core.dll</AssemblyName>
<HintPath>$(MSBuildProgramFiles32)\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\$(TargetFSharpCoreVersion)\FSharp.Core.dll</HintPath>
</Reference>

然后我重新加载项目。

由于这是一个相当笨拙的过程,希望更有洞察力的用户会发布更好的解决方案。

关于f# - 为什么添加一些包会破坏我的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44852083/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com