问题是我的类型之一,Expression<'P>
无法用TypeLoadException
加载。不幸的是,Visual Studio无法显示任何其他信息,包括其InnerException
。
实际上,我根本无法检查异常对象。当地人不会显示$exception
,并且在“监视”窗口中手动输入也无法找到它。堆栈窗口也为空。
我尝试了融合日志,但是该程序集甚至没有显示在此处,例如日志似乎在加载此类型(和程序集)之前立即停止。
我也尝试过创建一个C#项目,并对其进行调试,而不是直接对F#项目进行调试,但是遇到了同样的问题。
我正在通过VS 2017 15.8.0预览版5使用F#4.5预览版,但问题可能并非特定于此(代码使用了4.5的东西)。
我最近做了一个巨大的更改,以通过byref
使用自定义指针,这还包括将项目迁移到目标.NET Standard 2.0。对.NET标准F#之前的NuGet包仍然存在依赖性。
FSharp.Core-4.5.2已安装到所有相关项目中,但该依赖项除外。
P.S。如果来自F#Tools团队的人看到此消息,则代码位于https://github.com/Church-of-the-Singularity/GeneticProgramming中,标记为repro/TypeLoadException-Expression
更新 看来是编译器错误。我将失败的示例缩小为以下代码:
[<Struct>] type Ptr<'P, 'T when 'T: struct>(ptr: 'P) = member this.Address = ptr;;
[<Struct>] type MyExpr<'P> = Zero | Reference of reference:Ptr<'P, MyExpr<'P>>;;
如果仅将其粘贴到F#交互式中,则会看到我的异常。在4.1和4.5中都可以复制。已报告to GitHub。
答案 0 :(得分:1)
这似乎是编译器错误。我将失败的示例缩小为以下代码:
[<Struct>] type Ptr<'P, 'T when 'T: struct>(ptr: 'P) = member this.Address = ptr;;
[<Struct>] type MyExpr<'P> = Zero | Reference of reference:Ptr<'P, MyExpr<'P>>;;
如果仅将其粘贴到F#交互式中,则会看到我的异常。在4.1和4.5中都可以复制。已报告to GitHub。
解决方法:按照'P
定义中的'T
和Ptr
的4.1交换顺序:-D