为什么数组中的记录会导致heroku中的类型初始值设定项错误?
我正在向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 错误案例:为什么数组中的记录会导致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.
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"}]