如何使用针对特定框架的mono / mcs编译托管dll?

时间:2017-02-11 14:57:02

标签: c# macos unity3d mono

我一直在使用mono / mcs将动态生成的(Protocol Buffer)代码编译到托管DLL中,以便在Unity中使用。从Unity 5.5开始,看起来它将不再加载针对4.0框架编译的DLL(我相信它想要2.0)。

我已经看过如何在MonoDevelop或Visual Studio中执行此操作,但我想在命令行中执行此操作,因为protobuf代码是动态生成的,因此可以更容易地使用shell脚本进行编译。

在shell脚本中我们做这样的事情:

mono --runtime=v2.0.50727 <stuff>

mcs -langversion:ISO-2 -sdk:2 -r:$unityengine_dll -target:library -out:$output <stuff>

当我们这样做时,我们总是以下面的形式出现警告(这使得它看起来似乎没有正确设置目标运行时)。即使有这些警告,在Unity 5.4.x中它也会加载dll并编译。在Unity 5.5+中,它似乎无法加载dll并在编译错误中死亡(它没有找到应该在dll中定义的内容)

WARNING: The runtime version supported by this application is unavailable.
Using default runtime: v4.0.30319
No framework specified; defaulting to 4.0.30319.42000

我们需要改变什么?我一直在使用mono / mcs的--runtime, - convertversion和-sdk -lib选项无济于事。这些应该用于编制统一的内容?还尝试使用当前最新版本的mono编译以及Unity附带的单声道,两者都有相同的问题。

Enviornment:osx sierra 10.12.3,unity 5.5,mono 4.6.2.16

1 个答案:

答案 0 :(得分:0)

看起来我只需将mono和mcs指向/Library/Frameworks/Mono.framework/Versions/3.12.1/中的版本,然后他们选择了正确的程序集来构建!