2017-05-29 50 views
3

我正在将一个F#应用程序部署到heroku作为脚本,并且我遇到了非常奇怪的问题。我发现了在例以下错误如下所示,但不是其他:为什么数组中的记录会在heroku中导致类型初始值设定项错误?

System.TypeLoadException:无法加载类型“FSI_0007 +试验[]”从 组件“FSI总成,版本= 0.0 .0.0,Culture = neutral, PublicKeyToken = null'。 (包装托管到本机) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object [],System.Exception &)at System.Reflection.MonoMethod.Invoke(System.Object obj ,的BindingFlags invokeAttr,System.Reflection.Binder粘合剂,System.Object的[] 参数,System.Globalization.CultureInfo培养)< 0x410a5830 + 0x000b7>在:0

错误情况下:

type Test = { Test: string } 
printfn "%A" [|{Test = "test"}|] <--- error here 

工作情况:

printfn "%A" [|"test"|] 

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

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

这样看来,我不能把记录数组,但我可以把任何内置的数组类型。另外,我可以将记录放入列表中。并自己记录是好的。

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

我在这里使用buildpack: https://github.com/SuaveIO/mono-script-buildpack

它采用单4.4.2.11。

它在视觉工作室没有发生与本地fsi。

+0

看起来像一个错误。它只是记录文字,也就是说,你可以让一个记录绑定一个记录并使用它来绑定数组元素? – scrwtp

+0

另外,如果你在数组开始的操作符'[|'和开始记录操作符'{'?可能是某些内容将[[| {'三个字符解析为单个标记而不是两个标记。如果是这样,那么写'[| {...} |]'应该解决解析错误。 – rmunn

+0

@rmunn错误只发生在heroku。 – mydogisbox

回答

3

这看起来非常像this bug in mono

我并不确定哪个版本的mono会受到这个影响,并且bug讨论中的报告有点矛盾 - 但mono 4.8.0的最新稳定版似乎适用于至少一个人。 。

另一个解决办法是改变你的网站使用fsproj使代码被编译并开始为(通过F#的交互,而不是使用fsx文件与运行)的可执行文件 - 我想编译的代码不会从这个错误遭受(或涉及单反射的其他潜在错误)。

+0

这看起来像问题!不幸的是,我转向使用脚本,因为我无法弄清楚如何在使用sln时启动web服务。 https://stackoverflow.com/questions/35681957/deploy-websharper-suave-web-application-to-heroku没有足够的细节。 – mydogisbox

+0

@mydogisbox看起来你需要在根目录中有'sln'文件:https://github.com/SuaveIO/mono-script-buildpack/blob/master/bin/compile#L67 –

+1

我想通了。我需要将我的procfile设置为 “web:mono src/ProjectName/bin/Debug/executable.exe” – mydogisbox

相关问题