Я использовал mono/mcs для компиляции динамически сгенерированного (Protocol Buffer) кода в управляемые DLL для использования в Unity. Что касается Unity 5.5, похоже, что он больше не будет загружать DLL, скомпилированные в рамки 4.0 (я считаю, что он хочет 2.0).Как скомпилировать управляемую dll с mono/mcs, нацеленную на определенную структуру?
Я видел, как это сделать в MonoDevelop или Visual Studio, но я хотел бы сделать это в командной строке, потому что код protobuf динамически генерируется, поэтому гораздо проще использовать сценарий оболочки для компиляции.
В сценарии оболочки мы делаем что-то вроде этого:
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
Что нам нужно изменить ? Я играю с --runtime, --langversion и -sdk -lib варианты mono/mcs безрезультатно. Что они должны быть настроены для компиляции для единства? Также попробовали использовать как текущую обновленную версию моно для компиляции, так и моно, входящую в Unity, и те же проблемы.
Enviornment: OSX сьерра 10.12.3, единство 5,5, моно 4.6.2.16