2017-05-29 30 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

相關問題