前置き
MagicOnion.Serverをホスティングするにあたって、推奨のMagicOnion.Hostingは.NETアプリにおける汎用的なホスティング機能のMicrosoft.Extensions.Hostingに基づいているため、そのノウハウの恩恵を受けつつより柔軟な設定を行うことができるようになっています。(Microsoft.Extensions.Hostingについては.NET Generic Hostが詳しい)
そこで今回は、前回の投稿で未検証となっていたMagicOnion.Hostingを用いた場合の検証結果について共有します。
MagicOnion.HostingをUnityで動かす
以下、動いたところまで手順を共有します。
確認環境
- Unity 2019.3.5f1
- MagicOnion 3.0.11
- MessagePack for C# 2.1.90
- gRPC for C# 2.27.0
前回までの手順が完了していることが前提です。
MagicOnion.Hostingを追加する
https://github.com/Cysharp/MagicOnion/tree/master/src/MagicOnion.Hosting から.NET Core用のMagicOnion.Hostingを追加で取り込みました。
Microsoft.Extensions.Hostingとその依存関係を全て取り込む
MagicOnion.HostingはMicrosoft.Extensions.Hostingを必要とするのでそれらを取り込みました。
依存関係が多いため、Unity用NuGet Package ManagerのNuGetForUnityを使いました。
dllの重複を解消する
前回追加していた
- System.Buffers.dll
- System.Memory.dll
- System.Runtime.CompilerServices.Unsafe.dll
- System.Threading.Tasks.Extensions.dll
のdllが重複してしまったのでNuGetForUnityで取り込んだほうを削除しました。
以上でMagicOnion.HostingがUnityで動くようになりました。
課題点
ここまでで動きはした…のですが、実際のところはUnity Editor上で実行すると実行時にUnloading broken assembly xxx.dll, this assembly can cause crashes in the runtimeのようなエラーが発生してしまいます。(動作上の問題はありません)
ビルド時にはこれがWarningに変わるので、取り込み方に問題があってプロジェクトのアセンブリ参照がバグっているような気がしています。
この問題は解決次第、更新したいと思います。