F# System.TypeLoadException

标签 f# mono visual-studio-code typeloadexception

通过这个代码

module ObjectRe =
  type BM = A | N
  type Object = {
    Name: string
    Pattern: BM array
  }

  let patterns = [|{Name = "Pro"; Pattern = [|A;N;N;A|]} |]

我总是收到此错误消息
System.TypeLoadException: Could not load type 'FSI_0007+ObjectRe+Object[]' from assembly 'FSI-ASSEMBLY, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
  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 <94fd79a3b7144c54b4cb162b50fc7761>:0 
Stopped due to error

有人有想法吗?我在 Mac 上使用 Visual Studio Code。

谢谢

最佳答案

我也可以在 macOS 10.11、mono 4.6 上重现这个。

最小复制是:

module X =
    type Y = Y
    let l = [| Y |]

解决方法 :
module X =
    type Y = Y
    let g = List.toArray [ Y ]

所以在你的情况下替换 两者 内外[| |]声明。

为什么这只发生在 VS Code/fsharpi 而不是 Xamarin?

如果您启动事件监视器,您将看到 VS Code/fsharpi 使用/Library/Frameworks/Mono.framework/Versions/4.6.0/lib/mono/4.5/fsi.exe二进制文件,但 Xamarin Studio 使用 FCS Xamarin Studio.app/Contents/Resources/lib/monodevelop/AddIns/BackendBindings/MonoDevelop.FSharpInteractive.Service.exe您还可以检查来自交互的第一条消息的版本( F# Interactive for F# 4.1 ,它们可能不同)。

最后,我相信这是一个关于单声道 + 动态程序集的错误,由 fsi 发出的代码触发.将此代码编译为 exe在所有平台上都可以正常工作(如果您检查生成的 IL 似乎很正常)。

关于F# System.TypeLoadException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39589982/

相关文章:

recursion - F# 中计算排列的递归函数存在类型不匹配错误

c#-4.0 - F# 的 BNF 或 EBNF 解析器生成器中的 C# 语法

f# - 值(value)限制问题

spring - 从返回 future 的服务创建 Mono/Flux 的正确方法

sql - 什么是时间戳/行版本(SQL Server)与 PostgreSQL 的等价物

wcf - MPI vs. Microsoft WCF vs. Microsoft TPL

c# - 检测 CPU 对齐要求

javascript - 如何为多个调试器设置 Visual Studio Code?

java - Java 独立项目 VSCode 中显示无法识别的选项 : -ea, --enable-preview 错误

visual-studio-code - 在 VSCode 中查看类层次结构