Mono运行FSharp.Charting.Gtk编译产物报FileNotFoundException问题求助
问题原因
你遇到的运行时报错核心原因是:#load 指令仅在F#交互(fsharpi)环境下生效,它会自动加载fsx脚本内关联的所有程序集依赖、导入对应命名空间,但fsharpc编译时完全不识别#load指令,你未在编译阶段显式指定FSharp.Charting.Gtk的程序集引用,运行时自然找不到对应dll文件。
编译模式下的解决步骤
- 编译时显式添加程序集引用
首先删除源码中的#load指令,编译时用-r参数指定FSharp.Charting.Gtk.dll的路径,同时要把它依赖的所有相关dll(比如GtkSharp相关程序集、FSharp.Charting核心dll)都一起引入,编译命令示例:fsharpc -r:FSharp.Charting.Gtk.2.1.0/lib/net45/FSharp.Charting.Gtk.dll 你的源码文件名.fs - 运行前补齐所有依赖文件
编译完成后,把FSharp.Charting.Gtk.dll、以及它所在目录下的所有依赖dll都复制到你生成的exe所在文件夹,Mono运行时才能成功加载全部依赖。 - M1芯片环境兼容适配
M1架构macOS默认安装的Mono多为x86_64版本,需要通过Rosetta转译运行,或者安装适配arm64的Mono版本,运行exe时如果出现架构不兼容问题,用以下命令启动:arch -x86_64 mono 你的生成exe文件名.exe - 补充优化:如果图表窗口出现一闪而过的情况,可在绘图代码末尾添加一行
System.Console.ReadLine(),让程序等待输入后再退出,方便查看生成的图表。
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

