---
title: "Unity Editor でも HoloLens でも、 MRTK と SignalR を使いたい"
emoji: "📝"
type: "tech"
topics: ["HoloLens"]
published: true
published_at: "2018-06-15 23:45"
cover: "./20180615232028.jpg"
category: "info"
author: "中村 薫"
description: "はじめに かずきさんとたるこすさんがHoloLensやWindows MRなどのUWP環境とUnityエディターでSignalRクライアントを使う方法をまとめてくれています。 blog.okazuki.jp tarukosu.hatenab"
original_url: "https://blog.hololab.co.jp/entry/2018/06/15/234507"
---
![](./20180615232028.jpg)

# はじめに

かずきさんとたるこすさんがHoloLensやWindows MRなどのUWP環境とUnityエディターでSignalRクライアントを使う方法をまとめてくれています。

<https://blog.okazuki.jp/entry/2018/04/26/125929>

[blog.okazuki.jp](https://blog.okazuki.jp/entry/2018/04/26/125929)

<http://tarukosu.hatenablog.com/entry/2018/04/27/121039>

[tarukosu.hatenablog.com](http://tarukosu.hatenablog.com/entry/2018/04/27/121039)

SignalRクライアント単体であればこの方法で動くのですが、MRTKを入れるとビルドエラーが発生します。このエントリではその解決方法について書きます。

なお、以下の方法はSignalR.Clientを自分でビルドしているため、自己責任にて使用してください。ビルドしたファイルは下記にあります。

-   [SignalR.Client.zip - Google ドライブ](https://drive.google.com/file/d/1ozLus99o-CuFvOLee1im0g6SQFaHfaY_/view?usp=sharing)

# 問題点

SignalRクライアントとMRTKを同時にプロジェクトに入れた場合、それぞれがNewtonsoft.Json.dllを参照しています。しかし、Microsoft.AspNet.SignalR.Client.dllが使用しているNewtonsoft.Json.dllのバージョンが古い(6.0.4)ため、MRTKのNewtonsoft.Json.dllのバージョン(10.0.3)と競合します。これによってUnityエディター上でビルドできない問題が発生します。

どちらかを削除してもお互いのバージョンエラーでビルドができません。

MRTKでNewtonsoft.Json.dllを参照しているのはGLTFのライブラリなので、GLTFフォルダごと削除してみましたが、Immersive用のコントローラーモデルがGLTFを利用しているようでInput系でエラーが出始めました。このため、MRTK側で調整するのも現実的ではありませんでした。

Visual Studioの場合configファイルでバージョンのリダイレクトを行いますが、Unityエディターの場合の方法がわからない(これで解決できるなら一番いいかもしれません)ため、なんとかMicrosoft.AspNet.SignalR.Client.dllの参照しているDLLのバージョンを変更します。

幸いSignalRのコード一式は公開されているので、これをビルドします。

<https://github.com/SignalR/SignalR>

[github.com](https://github.com/SignalR/SignalR)

# 結果

Unityエディター、UWPビルドともに動作していることがわかります(UWP版はマテリアルはがれてるのはご愛敬)。エディター用の.NET DLLとUWP用のDLLを両方入れているので、どちらの環境でも同じように動作します(サーバーはかずきさんが公開しているものを使用しています)。

![f:id:kaorun55:20180615232507g:plain](./20180615232507.webp) ![f:id:kaorun55:20180615232100g:plain](./20180615232100.webp)

# SignalR.Clientのビルド

GitHubからコードをダウンロードして、プロジェクトを開きます。今回、エディター用DLLは「Microsoft.AspNet.SignalR.Client45」をUWP用DLLは「Microsoft.AspNet.SignalR.Client.UWP」を使用しています。

それぞれのプロジェクトの「参照」メニューからNuGetパッケージの更新を行います。このとき、Newtonsoft.Json.dllの該当バージョンの10.0.3を指定します。パッケージを更新したらビルドを行います。正常にビルドができればOKです。

![f:id:kaorun55:20180615234004p:plain](./20180615234004.jpg)

# おまけ

エラー画像

## Newtonsoft.Json.dllのバージョン

下記がVisual StudioのNuGetで取得したSignalR.Clientが参照しているNewtonsoft.Json.dllのバージョン(6.0.4)。

![f:id:kaorun55:20180615233325p:plain](./20180615233325.jpg)

下記がMRTKで使われているNewtonsoft.Json.dllのバージョン(10.0.3)。

![f:id:kaorun55:20180615233341p:plain](./20180615233341.png)

## Newtonsoft.Json.dllのバージョンを削除した場合の動作

どちらかを削除してもお互いのバージョンエラーでビルドができません。 ![f:id:kaorun55:20180615233533p:plain](./20180615233533.png) ![f:id:kaorun55:20180615233536p:plain](./20180615233536.png)
