【发布时间】:2017-12-04 17:53:51
【问题描述】:
我注意到添加包有时会破坏我的代码。像 Seq.replicate 和 List.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) 点击Browse。
6) 搜索Newtonsoft.Json并安装。
7) 点击Ctrl+F5,程序运行没有任何问题。控制台打印
["A"; "A"; "A"; "A"; "A"]
[||]
8) 按照步骤 4 到 6 进行操作,并使用 Nuget 安装包 MathNet.Numerics。
9) 点击Ctrl+F5,程序运行没有任何问题。控制台打印
["A"; "A"; "A"; "A"; "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)安装来避免这个问题?
【问题讨论】:
-
你安装的是什么版本的包?
-
(1)红色波浪线下的错误是什么? (2) 您是否注意到安装
MathNet.Numerics.FSharp是否导致安装任何other 包(由于是传递依赖)? -
@FyodorSoikin - 红色波浪下方的错误是
The value, constructor, namespace or type 'replicate'is not defined。当安装MathNet.Numerics.FSharp时,它也会安装FSharp.Core.3.1.2.5。 -
@mydogisbox -
MathNet.Numerics和MathNet.Numerics.FSharp都是版本3.19.0。Newtonsoft.Json是版本10.0.3但即使我不安装它也会出现问题。FuleSnabel的回答表明问题是由于转移到FSharp.Core.3.1.2.5,FSharp.Core的旧版本。 -
@Soldalma 我添加了一个答案,向您展示了如何在不深入 fsproj 内部的情况下执行此操作,并且还扩展了 Paket。希望您再试一次,因为它也可以在命令行中使用,也可以在 VSCode 中使用。