我注意到添加包有时会破坏我的代码.类似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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
3)命中Ctrl+F5,程序运行没有任何问题.
4)上单击鼠标右键References的Solution Explorer.点击Manage Nuget Packages....
5)点击Browse.
6)搜索Newtonsoft.Json并安装它.
7)命中Ctrl+F5,程序运行没有任何问题.控制台打印
["A"; "A"; "A"; "A"; "A"]
[||]
Run Code Online (Sandbox Code Playgroud)
8)按照步骤4到6进行操作并MathNet.Numerics使用安装包Nuget.
9)命中Ctrl+F5,程序运行没有任何问题.控制台打印
["A"; "A"; "A"; "A"; "A"]
[||]
10)按照步骤4到6进行操作并MathNet.Numerics.FSharp使用安装包Nuget.
11)单击Program.fs选项卡.在Seq.replicate andList.take` 下出现了可怕的红色波浪线.
12)命中Ctrl+F5.弹出一个对话框,显示以下消息:
There were build errors. Would you like to continue and run the last successful build?
Run Code Online (Sandbox Code Playgroud)
问题:
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>
Run Code Online (Sandbox Code Playgroud)
然后我重新加载项目.
由于这是一个相当笨重的程序,希望更有洞察力的用户将发布更好的解决方案.
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |