为什么数组中的记录会导致heroku中的类型初始值设定项错误?

为什么数组中的记录会导致heroku中的类型初始值设定项错误?,heroku,f#,typeinitializeexception,Heroku,F#,Typeinitializeexception,我正在向heroku部署一个F#应用程序作为脚本,我遇到了非常奇怪的问题。在下列情况下,我得到了以下错误,但在其他情况下没有: System.TypeLoadException:无法从加载类型“FSI_0007+测试[]” 程序集“FSI-assembly,版本=0.0.0.0,区域性=中性, PublicKeyToken=null'。at(包装器管理为本机) 系统.反射.单项方法:内部调用 (System.Reflection.monmethod,object,object[],System.

我正在向heroku部署一个F#应用程序作为脚本,我遇到了非常奇怪的问题。在下列情况下,我得到了以下错误,但在其他情况下没有:

System.TypeLoadException:无法从加载类型“FSI_0007+测试[]” 程序集“FSI-assembly,版本=0.0.0.0,区域性=中性, PublicKeyToken=null'。at(包装器管理为本机) 系统.反射.单项方法:内部调用 (System.Reflection.monmethod,object,object[],System.Exception&)位于 System.Reflection.MonMethod.Invoke(System.Object对象,BindingFlags invokeAttr,System.Reflection.Binder活页夹,System.Object[] 参数,System.Globalization.CultureInfo(区域性):0

错误案例:

type Test = { Test: string }
printfn "%A" [|{Test = "test"}|]  <--- error here
所以看起来我不能将记录放入数组,但我可以将任何内置类型放入数组。此外,我还可以将记录放入列表中。记录本身也很好

为什么记录和数组的组合会导致错误

我在这里使用构建包:

它使用mono-4.4.2.11

visual studio中的本地fsi不会发生这种情况。

这看起来很像

我不确定哪些版本的mono受到了影响,错误讨论中的报告也有点冲突——但mono 4.8.0的最新稳定版本似乎至少适合一个人


另一个解决方法是将您的网站更改为使用
fsproj
,以便将代码编译并作为可执行文件启动(而不是使用
fsx
文件并通过F#interactive运行)-我认为编译后的代码不会出现此错误(或涉及单反射的其他潜在错误)。

看起来像一个错误。它是否只是记录文字,也就是说,您可以让bind记录并使用该let绑定来绑定数组元素吗?另外,如果在数组运算符
[|
的开头和记录运算符
{
的开头之间放置一个空格,会发生什么情况?可能是有什么东西正在解析这三个字符
[|{
错误地将其作为单个标记而不是两个标记。如果是,则写入
[|{…}}]
应该可以解决解析错误。@rmun错误只发生在heroku中。这看起来像是问题!不幸的是,我切换到使用脚本,因为我不知道如何在使用sln时启动web服务。没有足够的详细信息。@mydogisbox看起来您需要在根目录中包含
sln
文件:我认为是o我需要将procfile设置为“web:monosrc/ProjectName/bin/Debug/executable.exe”
printfn "%A" [|"test"|]

type Test = { Test: string }
printfn "%A" {Test = "test"}

printfn "%A" [{Test = "test"}]