MRTK v2.2 + Scripting Backend .NETで嵌ったはなし

## この記事を必要とするひと
- HoloLens/HoloLens2でMRTKv2.2を使いたい
- ScriptingBackend .NETでデバッグをしたい

## この記事を必要としないひと
- IL2CPPのビルド時間に耐えられる
-  ScriptingBackend .NETでデバッグなんかしない
- MRTKv2.1で十分である

## 開発環境
- Unity 2018.4.15f
- Visual Studio 2019
- MRTKv2.2

## 経緯
MRTKv2.2でUnity上での開発を完了させ、実機（HoloLens2）にデプロイすべくBuildしたら詰んだ。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">何を言われているのか分かるが判らなくて豆腐さえ置けない。<br>MRTKver2.2でMSBuildとか入ったっぽくてそれの関連？？？？<a href="https://twitter.com/hashtag/HoloLens?src=hash&amp;ref_src=twsrc%5Etfw">#HoloLens</a> <a href="https://twitter.com/hashtag/Unity?src=hash&amp;ref_src=twsrc%5Etfw">#Unity</a> <a href="https://t.co/KelZ0wbxIN">pic.twitter.com/KelZ0wbxIN</a></p>&mdash; シュレディンガーのナツさん (@natsu_san) <a href="https://twitter.com/natsu_san/status/1219574973225820160?ref_src=twsrc%5Etfw">January 21, 2020</a></blockquote> 


## 解決方法（簡潔に）
- MRTKv2.2で追加されたMSBuildを使わない（ただし、別の制約あり）
- MRTKv2.1でBuildしてからMRTKv2.2に差し替える（未確認）
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">こんにちは。自分も全く同じ状況に遭いました。<br>試しにmrtk2.1.0を入れてビルドして、削除し、次にmrtk2.2.0を入れてましたらビルドできました。あまり賢い方法とは言えませんが、参考にしていただければ幸いです。</p>&mdash; Cindy / キンキン (@kinkincindy) <a href="https://twitter.com/kinkincindy/status/1219790212865216512?ref_src=twsrc%5Etfw">January 22, 2020</a></blockquote>


## NGな手順

新規プロジェクト作成
SwichPlatform(UWP)
Microsoft.MixedReality.Toolkit.Unity.Foundation.2.2.0.unitypackageインポート
MixedRealityToolkit > ConfigureUnityProject でMSBuildにチェックを入れる（デフォルト）
![クリップボード-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570991/6590c526-f211-ea45-b749-b95b76a134ac.png)
ScriptingBackendを.NETにする
![クリップボード-9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570991/8f43fd8f-6fea-ee0a-539c-fb547ba7dab6.png)
Editor上でお豆腐を置く（ここまでは問題なし）
![クリップボード-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570991/79e06f59-6995-4561-2962-5273fb4b4afd.png)
Build
![クリップボード-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570991/d88e2f30-63c8-4027-ef00-bba74126ac8d.png)
突然の死。
![クリップボード-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570991/20b50955-db41-fd89-5d57-03b21bf197cd.png)

> Assets\MixedRealityToolkit.Providers\WindowsMixedReality\WindowsMixedRealityReprojectionUpdater.cs(61,35): error CS0012: The type 'Enum' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.

「.netStandard2のassembly参照が無いよ！」
んなわけあるかーーｗｗｗｗ

MSBuild > Regenelate C# SDK Projectしてみる

![クリップボード-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570991/b9cc535c-de4b-5770-d6de-4a728b87b3ef.png)

> Dependencies.msb4u.csproj : error NU1101: �p�b�P�[�W MSBuildForUnity ��������܂���B�\�[�X Microsoft Visual Studio Offline Packages, nuget.org �ɂ́A���� ID �̃p�b�P�[�W�����݂��܂���B
UnityEngine.Debug:LogError(Object)

ちょっと何言ってるか分からないですね。。。

## 救いの手
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">そこは沼。。。<br>・MRTK は .unitypackage で入れる<br>・MS Build for Unity は有効化しない<br>のふたつで、たぶん。。。 <a href="https://t.co/6VIVF47E0D">https://t.co/6VIVF47E0D</a></p>&mdash; みう (16) (@miunet0123) <a href="https://twitter.com/miunet0123/status/1219572484481011718?ref_src=twsrc%5Etfw">January 21, 2020</a></blockquote> 

## 解決策：MSBuild使わない

新規プロジェクト作成
SwichPlatform(UWP)
Microsoft.MixedReality.Toolkit.Unity.Foundation.2.2.0.unitypackageインポート
MixedRealityToolkit > ConfigureUnityProject で **MSBuildのチェックを外す**

![クリップボード-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570991/ee74729a-5a48-f386-8b25-28b8f45de5fb.png)
ScriptingBackendを.NETにする
Editor上でお豆腐を置く（なんとなく青）
![クリップボード-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570991/a7de5986-71a2-ec25-03c5-e1fcb6d231ea.png)
Build!
VisualStudioで開く→デバッグなしで開始
![クリップボード-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570991/ff3f64fb-6fed-9724-dd4b-bcd8fe3f855e.png)
 ......。
[Visual Studio 2017 Update3でC#7.1を使ってみた](http://sourcechord.hatenablog.com/entry/2017/09/14/232325)
アッ、ハイ！

気を取り直してVisualStudio **2019** で開く→デバッグなしで開始
![20200122_132522_HoloLens.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570991/680725bd-2d3b-a59b-93a5-23de64f67c13.jpeg)

バーチャル豆腐きた！


## 考察

MSBuildは依存系DLLを集めてくれるらしい。
MSBuildを有効にすると下記のメッセージが表示される。

![クリップボード-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570991/fea08cb7-1279-9f41-3155-d077602648e1.png)

> DLL探索パスにDotNetAdaptorのフォルダを追加したよ～

おそらく、ここにDLLが入る想定なのだが、何らかの理由で上手く入らないパターンがある。

## 制約
[Microsoft Mixed Reality Toolkit Release Notes](https://microsoft.github.io/MixedRealityToolkit-Unity/version/releases/2.2.0/Documentation/ReleaseNotes.html)
曰く
![クリップボード-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570991/d5e8331b-5e23-6d99-5718-33677179326f.png)

> MSBuildはNugetで自動的に依存を解決するよ
> いくつかの機能はMSBuild必須だよ（例えばHoloLens2のhand aned eye remoting）

ぬぬ。

![クリップボード-7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570991/b17fc27a-07c3-587b-72b1-df9f5ff82306.png)

> Holographic Remotingでハンドトラッキングとアイトラッキングをサポートしたよ！

ぐぬぬ。

ちなみに、NGパターンでもIL2CPPだと普通にビルドできます。
が、すごーーーーーーーーく待たされる。辛い。

> [MRTK supports both IL2CPP and .NET scripting backends on Unity 2018](https://microsoft.github.io/MixedRealityToolkit-Unity/version/releases/2.2.0/Documentation/GettingStartedWithTheMRTK.html)

MSさんなんとかしてよね！
あともっと建設的な解決策がありましたらどなたかご教授くださいm(_ _)m