凹みTips

C++、JavaScript、Unity、ガジェット等の Tips について雑多に書いています。

uREPL の .NET 4.6 対応を行いました

はじめに

issue で Unity 2017 における .NET 4.6 から uREPL が動かないとの報告を受けていたので対応を行いました。.NET 3.5 はエディタ上では動くのですがビルドで正常に動かない不具合が解消できなかったため、サポート外となっています。.NET 3.5 を使いたい場合は以前のリリースをご使用下さい。

uREPL については以下の記事をご参照下さい:

tips.hecomi.com

tips.hecomi.com

環境

  • Unity 2017.3.0b11

ダウンロード

github.com

Release から v0.5.0 以降をダウンロードしてください。

解説

主に Mono.CSharp.Evaluator のセットアップの仕方が変わりました。以前は、Evaluator は static な変数でしたが、Mono.CSharp.CompilerContext を与えて自分で new するようになりました。

var settings = new Mono.CSharp.CompilerSettings();
foreach (var assembly in System.AppDomain.CurrentDomain.GetAssemblies())
{
    if (assembly == null) continue;
    settings.AssemblyReferences.Add(assembly.FullName);
}
var printer = new Mono.CSharp.ConsoleReportPrinter(reporter);
var context = new Mono.CSharp.CompilerContext(settings, printer);
evaluator = new Mono.CSharp.Evaluator(context);

エラーログは TextWriter 派生のクラスを ConsoleReportPrinter に与えてあげれば渡ってくるようになります。詳細は以下の stackoverflow をご参照下さい:

stackoverflow.com

おわりに

今後は古い C# のスタイルを新しいものに置き換えて行こうと思います(主に Thread 周りを async にしたい)。対応すれば HoloLens でも動くようになるかもしれません。。。整理し終わったら時間のある時にポチポチ機能を追加していきます。