f# - 如何在 F# 代码中没有详细信息的情况下调试 TypeLoadException?

标签 f# typeloadexception

问题是我的类型之一,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/

相关文章:

c# - System.TypeLoadException - 程序集 *** 中类型 get_*** 中的方法 *** 没有实现?

c# - GetTypes() 和 TypeLoadException 错误

.net - App.config和F#Interactive无法正常工作

reflection - 在 F# 中轻松获取函数名称

asp.net - 类型 : 'System.Net.Http.WebRequestHandler' 违反了继承秒规则

.net - 为什么这个简单的远程处理示例可以在我的笔记本电脑上运行,但不能在我的台式机上运行?

c# - 为什么泛型结构不能具有在 C# 中指定泛型类型的静态成员?

F# 累积随机数序列

f# - 假的 Shell.Exec

f# - 在计算表达式中省略 'do!'