Visual StudioでXamarin.iOSを利用したライブラリを作成しました。

using JavaScriptCore;
using Foundation;

namespace JSCore
{
    public static class MyClass
    {
        public static int Test()
        {
            JSContext jsContext = new JSContext();
            jsContext[new NSString("arg1")] = JSValue.From(2, jsContext);
            jsContext[new NSString("arg2")] = JSValue.From(2, jsContext);

            var jsResult = jsContext.EvaluateScript("arg1 + arg2;");

            return jsResult.ToInt32();
        }
    }
}

ビルドで出来たJSCore.dllXamarin.iOS.dllをUnityのPluginsフォルダに入れてC#スクリプトの方で呼び出しを行いました。

しかし、UnityでアプリをビルドするとConverting Managed assemblies to C++の段階でエラーが起きてビルド失敗します。エラー文は以下の通りです。

IL2CPP error for method 'System.Void ObjCRuntime.Runtime::set_UseAutoreleasePoolInThreadPool(System.Boolean)' in assembly '/Users/ユーザ名/Documents/JavaScriptRuntimeTest/Temp/StagingArea/Data/Managed/Xamarin.iOS.dll'
Additional information: Build a development build for more information. Object reference not set to an instance of an object.

エラー文を読んでみて恐らくライブラリが参照しているSystem.dllとUnity側で利用しようとしているSystem.dllが違うのかなと思い、ライブラリをビルドする時の出力に参照しているSystem.dllを含ませてそれをそのままUnityに入れてみました。

案の定、バージョンが衝突を起こしているという旨のエラーが出たので、プラットフォームの選択でiOSを選ぶことでエラーは消せたのですが、またしてもビルド時に同様のエラーが起きてしまいます。

error CS1703: Multiple assemblies with equivalent identity have been imported

Xamarin.iOSで利用できるSystem.dllが2.0.5.0で、Unity(Mono)が利用しているのが4.0.0.0なのは分かっています。

このエラーを回避する方法を知りたいです。

追記(2019/0.1/20): Unityは2018.3.0f2を使用。また、PlayerSettingsのAPI Compatibility Levelは.NET Standard 2.0に設定してあります。