Q:

Could not load type FSharpList from assembly FSharp. Core in Unity

I am trying to use F# from within Unity (the game engine, not the Microsoft dependency injection framework) and so far it's all gone well -- I can compile the files to a DLL, put that DLL next to FSharp.Core.dll inside the Assets directory, and Unity picks it all up and executes any code I've defined in there. 
My first hiccup came when I tried to use a list.   Adding the following:
static member template =
  [ "some strings"
    "inside an array" ]
  |> String.concat "\n"

Causes the following error to come up in Unity:
TypeLoadException: Could not load type 'Microsoft. FSharp. Collections. FSharpList`1' from assembly 'FSharp. Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. 

The version of FSharp.Core.dll that I have in my Assets directory is the one packaged with Unity, but I tried changing it to one of a few others (like the one that comes with the redistributable), to no avail.   All that changed is the reported version number: 4.0.0.0, 4.3.1.0, and 2.3.5.0 respectively. 
I am fairly new to both Unity and F#, so there may be something fundamental I'm missing here.   Should FSharpList`1 be defined in the FSharp.Core.dll assembly?   If not, where?   If so, why can't Unity seem to get at it? 
Any help greatly appreciated. 

A:

I figured this out in the end.   It was, as Carsten König suggested, to do with the version of F#/Mono I was compiling against not being compatible with that used by Unity.   Since I was compiling a dll using a simple fsharpc command and then including that in my Unity Assets directory, I didn't have an app.config (or at least, if it's possible to use one I don't know how). 
Instead I used fsharpc's --noframework option to prevent the compiler from linking against its default assemblies, and then manually referenced the assemblies that come packaged with Unity. 
The following makefile copies over the requisite DLLs into the Assets folder and compiles a DLL of our own scripts for use with Unity.   It just does the compile in one shot, so if you change any of the scripts it'll recompile everything, which if you use it you'll probably want to change, but it's a reasonable starting-point. 
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 $^ $@

I'm running on a mac, so my paths reflect that -- if you are on Windows you will need to tweak the paths to suit.   Simply add the list of .fs files to SRC and you're good to go (I've kept this manual so I can specify compilation order)

