无法使F#Chiron Json序列化程序在Linux上工作

无法使F#Chiron Json序列化程序在Linux上工作,linux,f#,mono,visual-studio-code,Linux,F#,Mono,Visual Studio Code,我无法使用VS代码在基本操作系统上运行Json序列化程序 在Windows上,它可以像我测试的那样工作。在MacOS上,如果我没有记错的话,它也能正常工作 以下是最低限度的无效解决方案: 这是脚本文件App.fsx: #load "paket-files/include-scripts/net46/include.chiron.fsx" open Chiron printfn "%A" (Object <| Map.ofList [ "foo", String "bar" ] |>

我无法使用VS代码在基本操作系统上运行Json序列化程序

在Windows上,它可以像我测试的那样工作。在MacOS上,如果我没有记错的话,它也能正常工作

以下是最低限度的无效解决方案:

这是脚本文件
App.fsx

#load "paket-files/include-scripts/net46/include.chiron.fsx"

open Chiron

printfn "%A" (Object <| Map.ofList [ "foo", String "bar" ] |> Json.format)
必须生成包含脚本。从IDE或通过执行
mono./paket/paket.exe生成包含脚本

当我运行
fsharpi App.fsx
时,我得到以下错误:

/tmp/test/stdin(0,1): error FS0078: Unable to find the file 'FParsecCS.dll' in any of
 /usr/lib/mono/4.5
 /tmp/test/./packages
 /tmp/test
 /usr/lib/cli/fsharp/
System.TypeInitializationException: The type initializer for 'Escaping' threw an exception.
  at Chiron+Formatting+formatObject@728-1.Invoke (System.Tuple`2[T1,T2] tupledArg) [0x0000f] in <57e2953614a049a0a74503833695e257>:0 
  at Microsoft.FSharp.Core.FSharpFunc`2[T,TResult].InvokeFast[V] (Microsoft.FSharp.Core.FSharpFunc`2[T,TResult] func, T arg1, TResult arg2) [0x00018] in <566a0818dff9fae1a745038318086a56>:0 
  at Chiron+Formatting+join@667-2[a].Invoke (System.Text.StringBuilder b) [0x00029] in <57e2953614a049a0a74503833695e257>:0 
  at Chiron+Formatting+join@666-1[a].Invoke (Microsoft.FSharp.Collections.FSharpList`1[T] values, System.Text.StringBuilder b) [0x00013] in <57e2953614a049a0a74503833695e257>:0 
  at Microsoft.FSharp.Core.OptimizedClosures+Invoke@3252[T2,TResult,T1].Invoke (T2 u) [0x00001] in <566a0818dff9fae1a745038318086a56>:0 
  at Chiron+Formatting+formatObject@726-6.Invoke (System.Text.StringBuilder x) [0x00013] in <57e2953614a049a0a74503833695e257>:0 
  at Chiron+Formatting+formatObject@726-7.Invoke (System.Text.StringBuilder x) [0x00001] in <57e2953614a049a0a74503833695e257>:0 
  at Chiron+Formatting+formatObject@726-8.Invoke (System.Text.StringBuilder x) [0x00001] in <57e2953614a049a0a74503833695e257>:0 
  at Chiron+Formatting+Json.format (Chiron+Json json) [0x00013] in <57e2953614a049a0a74503833695e257>:0 
  at <StartupCode$FSI_0001>.$FSI_0001.main@ () [0x00046] in <6e3acc116b9749ea9b5dc27663d21170>:0 
  at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
  at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00038] in <8f2c484307284b51944a1a13a14c0266>:0 
Stopped due to error
更新 另外,直接引用程序集也不起作用:

#r "packages/Aether/lib/net35/Aether.dll" 
#r "packages/FParsec/lib/net40-client/FParsecCS.dll"
#r "packages/FParsec/lib/net40-client/FParsec.dll"
#r "packages/Chiron/lib/net40/Chiron.dll" 

open Chiron

printfn "%A" (Object <| Map.ofList [ "foo", String "bar" ] |> Json.format)
#r“packages/Aether/lib/net35/Aether.dll”
#r“packages/FParsec/lib/net40 client/FParsecCS.dll”
#r“packages/FParsec/lib/net40 client/FParsec.dll”
#r“packages/Chiron/lib/net40/Chiron.dll”
开凯龙
printfn“%A”(对象Json.format)
您需要包括:

 #r "packages/FParsec/lib/net40-client/FParsecCS.dll"
 #r "packages/FParsec/lib/net40-client/FParsec.dll"
也是


您可能遇到了

不确定您缺少了什么,但使用
fsharp
docker container,我可以运行它:

#I "packages/FParsec/lib/net40-client/"
- #I "packages/Aether/lib/net35/"     
- #I "packages/Chiron/lib/net40/";;

--> Added '/root/packages/FParsec/lib/net40-client/' to library include path


--> Added '/root/packages/Aether/lib/net35/' to library include path


--> Added '/root/packages/Chiron/lib/net40/' to library include path

> #r "Chiron.dll";;

--> Referenced '/root/packages/Chiron/lib/net40/Chiron.dll' (file may be locked by F# Interactive process)

> open Chiron
- 
- printfn "%A" (Object <| Map.ofList [ "foo", String "bar" ] |> Json.format);;
Binding session to '/root/packages/FParsec/lib/net40-client/FParsecCS.dll'...
Binding session to '/root/packages/FParsec/lib/net40-client/FParsec.dll'...
"{"foo":"bar"}"

val it : unit = ()
#I“packages/FParsec/lib/net40 client/”
-#I“packages/ether/lib/net35/”
-#I“packages/Chiron/lib/net40/”;;
-->将“/root/packages/FParsec/lib/net40 client/”添加到库包含路径
-->将“/root/packages/ether/lib/net35/”添加到库包含路径
-->将“/root/packages/Chiron/lib/net40/”添加到库包含路径
>#r“Chiron.dll”;;
-->引用“/root/packages/Chiron/lib/net40/Chiron.dll”(文件可能被F#交互式进程锁定)
>开凯龙
- 
-printfn“%A”(对象Json.format);;
将会话绑定到“/root/packages/FParsec/lib/net40 client/FParsecCS.dll”。。。
将会话绑定到“/root/packages/FParsec/lib/net40 client/FParsec.dll”。。。
{“foo”:“bar”}
val it:unit=()

也许您可以尝试使用,看看它在那种环境下是否有效。如果它成功了,你会发现它基本上是同一个项目,尽管两者都以埃森为基础,但凯龙似乎从Fleece那里复制了很多代码和想法,而没有引用它。尽管Fleece不是同一个项目。凯龙在几年前发布时引用了Fleece+1关于Chiron而不是Fleece,因为Chiron不断更新。谢谢@Henrik,但我想知道复制一个项目而不是克隆并贡献给原始项目有什么意义。公关被拒绝了吗?如果方法相同,为什么要重复工作?方法不同。问题是mausch由于私人原因没有维护Fleece。可能是因为Elemental(基于较旧的ubuntu)需要更新的mono,而不是默认的repo提供的版本吗?尝试添加mono repo并从那里升级。你好@Henrik,谢谢你的回答。不幸的是,这并不能解决问题。生成的include脚本正是这样做的。如果我手动引用程序集(按照以下顺序,
ether.dll
FParsecCS.dll
fparsecc.dll
Chiron.dll
),我会得到相同的错误。
 #r "packages/FParsec/lib/net40-client/FParsecCS.dll"
 #r "packages/FParsec/lib/net40-client/FParsec.dll"
#I "packages/FParsec/lib/net40-client/"
- #I "packages/Aether/lib/net35/"     
- #I "packages/Chiron/lib/net40/";;

--> Added '/root/packages/FParsec/lib/net40-client/' to library include path


--> Added '/root/packages/Aether/lib/net35/' to library include path


--> Added '/root/packages/Chiron/lib/net40/' to library include path

> #r "Chiron.dll";;

--> Referenced '/root/packages/Chiron/lib/net40/Chiron.dll' (file may be locked by F# Interactive process)

> open Chiron
- 
- printfn "%A" (Object <| Map.ofList [ "foo", String "bar" ] |> Json.format);;
Binding session to '/root/packages/FParsec/lib/net40-client/FParsecCS.dll'...
Binding session to '/root/packages/FParsec/lib/net40-client/FParsec.dll'...
"{"foo":"bar"}"

val it : unit = ()