问题是我的类型之一,Expression<'P>
无法加载 TypeLoadException
。不幸的是,Visual Studio 无法显示任何其他信息,包括其 InnerException
.
事实上,我根本无法检查异常对象。本地人不显示$exception
,并且手动将其输入到 Watches 窗口中也找不到它。堆栈窗口也是空的。
我尝试过融合日志,但该程序集甚至没有显示在那里,例如日志似乎在加载此类型(和程序集)之前立即停止。
我还尝试创建一个 C# 项目并对其进行调试,而不是直接调试 F# 项目,但遇到了同样的问题。
我通过 VS 2017 15.8.0 Preview 5 使用 F# 4.5 预览版,但问题可能不是特定于它的(代码使用了一些 4.5 的东西)。
我最近做了一个巨大的改变,通过 byref
使用自定义指针其中还包括将项目迁移到面向 .NET Standard 2.0 的目标。仍然存在对 .NET 标准之前的 F# NuGet 包的依赖。
FSharp.Core-4.5.2 已安装到除依赖项之外的所有相关项目中。
附注如果 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 .
最佳答案
这似乎是一个编译器错误。我将失败的示例缩小为以下代码:
[<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 .
解决方法:在 4.1 中,在 Ptr
定义中交换 'P
和 'T
的顺序有效:-D
关于f# - 如何在 F# 代码中没有详细信息的情况下调试 TypeLoadException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51642874/