你如何编译一个托管的dll与mono / mcs针对特定的框架?

我一直在使用mono / mcs将动态生成的(协议缓冲区)代码编译为托管的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,--langversion和-sdk -lib选项,但都无济于事。 为了统一编制,应该设置什么? 也尝试过使用当前最新版本的mono进行编译,并且还使用Unity提供的mono,两者都有相同的问题。

环境:osx sierra 10.12.3,unity 5.5,mono 4.6.2.16


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

链接地址: http://www.djcxy.com/p/87289.html

上一篇: How do you compile a managed dll with mono/mcs targeting a specific framework?

下一篇: Entity Framework from .NET 3.5 with SQL CE 4.0