首页 文章

无法从Unity中的程序集FSharp.Core加载类型FSharpList

提问于
浏览
1

我试图在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.04.3.1.02.3.5.0 .

我对Unity和F#都很陌生,所以我可能会缺少一些基本的东西 . 应该在 FSharp.Core.dll 程序集中定义 FSharpList1` 吗?如果不是,在哪里?如果是这样,为什么Unity似乎无法得到它呢?

任何帮助非常感谢 .

1 回答

  • 1

    我最终想到了这一点 . 正如CarstenKönig建议的那样,与F#/ Mono的版本有关,我正在编译以防止与Unity使用的版本不兼容 . 由于我使用简单的 fsharpc 命令编译dll然后将其包含在我的Unity Assets 目录中,因此我没有 app.config (或者至少,如果它知道如何) .

    相反,我使用了 fsharpc--noframework 选项来阻止编译器链接其默认程序集,然后手动引用Unity打包的程序集 .

    以下makefile将必需的DLL复制到 Assets 文件夹中,并编译我们自己的脚本的DLL以与Unity一起使用 . 它只是一次性编译,所以如果你改变任何脚本,它可能想要改变,但它是一个合理的起点 .

    SRC:=
    OUT_DIR:=../Assets/Frameworks
    
    UNITY_FRAMEWORK_DIR:=/Applications/Unity/Unity.app/Contents/Frameworks/Managed
    MONO_DIR:=/Applications/Unity/MonoDevelop.app/Contents/Frameworks/Mono.framework/Versions/2.10.11/lib/mono/2.0
    MSCORLIB:=/Applications/Unity/Unity.app/Contents/Frameworks/Mono/lib/mono/unity/mscorlib.dll
    FSHARPCORELIB:=$(MONO_DIR)/FSharp.Core.dll
    
    .PHONY: all
    all: $(OUT_DIR)/MyScripts.dll $(OUT_DIR)/FSharp.Core.dll
    
    $(OUT_DIR)/MyScripts.dll: $(SRC)
            @mkdir -p $(OUT_DIR)
            fsharpc --noframework -r:$(MSCORLIB) -r $(FSHARPCORELIB) -r:$(UNITY_FRAMEWORK_DIR)/UnityEngine.dll --target:library -o $@ $^
    
    $(OUT_DIR)/FSharp.Core.dll: $(FSHARPCORELIB)
            @mkdir -p $(OUT_DIR)
            cp $^ $@
    

    我在Mac上运行,所以我的路径反映了 - 如果你在Windows上,你需要调整适合的路径 . 只需将.fs文件列表添加到 SRC ,您're good to go (I'已保留本手册,以便我可以指定编译顺序)

相关问题