我试图在Unity内部使用F#(the game engine,而不是Microsoft dependency injection framework),到目前为止它一切都很顺利 - 我可以将文件编译成DLL,将该DLL放在Assets目录中的 FSharp.Core.dll
旁边,然后Unity选择它up并执行我在那里定义的任何代码 .
当我尝试使用列表时,我的第一次打嗝就来了 . 添加以下内容:
static member template =
[ "some strings"
"inside an array" ]
|> String.concat "\n"
导致Unity中出现以下错误:
TypeLoadException: Could not load type 'Microsoft.FSharp.Collections.FSharpList`1' from assembly 'FSharp.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
我在Assets目录中的 FSharp.Core.dll
版本是与Unity打包的版本,但我尝试将其更改为其他几个版本(如可再发行版本附带的版本),但无济于事 . 所有更改的都是报告的版本号: 4.0.0.0
, 4.3.1.0
和 2.3.5.0
.
我对Unity和F#都很陌生,所以我可能会缺少一些基本的东西 . 应该在 FSharp.Core.dll
程序集中定义 FSharpList
1` 吗?如果不是,在哪里?如果是这样,为什么Unity似乎无法得到它呢?
任何帮助非常感谢 .
1 回答
我最终想到了这一点 . 正如CarstenKönig建议的那样,与F#/ Mono的版本有关,我正在编译以防止与Unity使用的版本不兼容 . 由于我使用简单的
fsharpc
命令编译dll然后将其包含在我的UnityAssets
目录中,因此我没有app.config
(或者至少,如果它知道如何) .相反,我使用了
fsharpc
的--noframework
选项来阻止编译器链接其默认程序集,然后手动引用Unity打包的程序集 .以下makefile将必需的DLL复制到
Assets
文件夹中,并编译我们自己的脚本的DLL以与Unity一起使用 . 它只是一次性编译,所以如果你改变任何脚本,它可能想要改变,但它是一个合理的起点 .我在Mac上运行,所以我的路径反映了 - 如果你在Windows上,你需要调整适合的路径 . 只需将.fs文件列表添加到
SRC
,您're good to go (I'已保留本手册,以便我可以指定编译顺序)