Visual Studioをアップデートしたら3日間ハマった話

---

2017/09/14 追記：
以下のバージョンでビルドが通るようになったとのことですが、
- Unity 2017.1.0p5
- Visual Studio 2017.15.3

HoloToolkitを使用するとビルドが通らなくなるという報告があります。
（詳しくはコメント欄参照）

やはり、「解決策3 Visual Studio 2017.15.0 にダウングレード」がお勧めです。

---

2017/09/02 追記：
Unity 5.6, Unity 2017.1に対してこの問題に対処したパッチリリースがありました。
まずは現在インストールしているUnityをこちらに置き換えてみることをオススメします。
- [Unity 5.6.3p2](https://unity3d.com/jp/unity/qa/patch-releases/5.6.3p2)
- [Unity 2017.1.0p5](https://unity3d.com/jp/unity/qa/patch-releases/2017.1.0p5)

成功した人の声。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">VS2017 15.3.3 + Unity 2017.1.0p5の組み合わせでHoloLensアプリのビルドができました！Unity 2017.1.0p4以前は相変わらず失敗するのでご注意ください。<a href="https://twitter.com/hashtag/HoloLensJP?src=hash">#HoloLensJP</a> <a href="https://t.co/wcxTi6moCU">https://t.co/wcxTi6moCU</a></p>&mdash; d_yama (@dy_karous) <a href="https://twitter.com/dy_karous/status/902928190586236933">2017年8月30日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

---

現在（2017/08/24）、最新版のVisual Studio 2017.15.3にアップデートするとHoloLensアプリがビルドできなくなります。
Visual Studio 2015を使用することで回避することが可能ですが、HoloToolkitを使っている場合別のエラーでビルドができません。

解決策は「アップデートしない」です。くれぐれもお気を付けを。
うっかりアップデートしてしまった方は以下の「解決策3 Visual Studio 2017.15.0 にダウングレード」がおすすめです。

新しい解決策やアップデートが来たら更新します。
もし何かご存知の方がいましたらコメントお願いします。

# エラー発生時の環境
- Windows Pro Creaters Update
- Unity 2017.1.0p4
- Visual Studio 2017.15.3
- Windows 10 SDK 10.0.15063
- HoloToolkit使用

HoloLens開発楽しいなーとやっていたら「ある日突然」「何もしていないのに」VSでビルドが通らなくなった。

エラーコード: CS0006
エラーメッセージ:　```メタデータ ファイル ‘C:\Users\xxx\Desktop\HolographicAcademy-Holograms-101\Origami\App\GeneratedProjects\UWP\Assembly-CSharp-firstpass\bin\x86\Release\Assembly-CSharp-firstpass.dll’ が見つかりませんでした。```
エラー画面: 
![SnapCrab_NoName_2017-8-23_12-48-45_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/167609/3c6946f3-6a86-b659-f463-f18538ed1cc4.png)

# 原因
調べた結果、Visual Studio 2017をアップデートしたのが原因みたいでした。

- Unity Community Support | [BUILD ERROR- Assembly -CSharp-firstpass.dll Could Not Be Found [HoloLens]](https://forum.unity3d.com/threads/build-error-assembly-csharp-firstpass-dll-could-not-be-found-hololens.488357/)

# 解決策1: Visual Studio 2015を使う
リンク先でも書かれているように、Visual Studio 2015とWindows 10 SDK（10.0.14393）に切り替えることで回避可能です。

Visual Studio 2015（15.3）をインストール、Windows 10 SDK（10.0.14393）をインストールします。
Unityでビルドする際、SDKを「10.0.14393」に変更します。

![SnapCrab_Build-Settings_2017-8-23_13-16-17_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/167609/58c5b624-6597-2694-4936-e84ef345ee71.png)

生成されたslnファイルをVS 2015で開けば、エミュレータなり実機なりにビルドできます。
MixedRealityToolkit（HoloToolkit）を使用していない場合はこれで問題ありません。

## この時の環境
- Unity 2017.1.0f3
- Visual Studio 2015.15.3
- Windows 10 SDK 10.0.14393
- HoloToolkit未使用


# 解決策2: project.lock.jsonを書き換える（不確実）
解決策1はMixedRealityToolkit（HoloToolkit）を使っている場合、別のエラーが発生します。

エラーコード: CS1003, CS1547, CS1528
エラーメッセージ: `構文エラーです。*が必要です。`など。
エラー画面: 
![SnapCrab_NoName_2017-8-24_16-35-20_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/167609/4c3c311b-2f04-0654-f090-e66eac81ef67.png)

## この時の環境
- Unity 2017.1.0f3
- Visual Studio 2015.15.3
- Windows 10 SDK 10.0.14393
- HoloToolkit使用

調べたら以下のスレッドで別の解決策がコメントされていました。

- Unity Community Support | Windows [.NET scripting backend and Visual Studio 2017.3 incompatibility](https://forum.unity3d.com/threads/net-scripting-backend-and-visual-studio-2017-3-incompatibility.487833/)

> No need to downgrade Visual Studio. One way to eliminate the problem is to edit the "project.lock.json" file and replace each occurrence of "UAP,Version=v10.0.10240" with "UAP,Version=v10.0". Note that each time you rebuild the VS project the "project.lock.json" file will be recreated and you will need to redo the edit.

VSをダウングレードしなくてもproject.lock.jsonを書き換えれば通るとのことです。
ただしその後のコメントにもあるように、この解決策は環境によっては適用できない場合があります。

悲しい人
> My project.lock.json only ever had UAP,Version=v10.0 - nothing of the likes of a specific version (even though I build for version 14393) - still it does not work. So I am not sure that this fix does anything really. Maybe only in a specific type of configuration?  

嬉しい人
> That worked perfectly! Thank you for saving me from having to downgrade Visual Studio.

僕のプロジェクトでproject.lock.jsonを見たところ、もともと"UAP,Version=v10.0"となっていました。

そこでAppディレクトリを削除したのち、Unityで改めてビルドしました。
この時SDKは10.0.15063を選択しました。
するとコメントのように"UAP,Version=v10.0.10240"となっていたので20か所ぐらいを"UAP,Version=v10.0"に修正。

Visual Studio 2017でビルドしましたが、元の木阿弥。
CS0006エラーが発生しました。悲しい人。

## この時の環境
- Unity 2017.1.0f3
- Visual Studio 2017.15.3
- Windows 10 SDK 10.0.15063
- HoloToolkit使用/未使用（どちらも試しました）

# 解決策3 Visual Studio 2017.15.0 にダウングレード
こちらからインストーラをダウンロードし、Visual Studio 2017.15.0を改めてインストールします。

- [Visual Studio Professional 2017 (version 15.0)](https://my.visualstudio.com/Downloads?q=Visual%20Studio%20Professional%202017%20(version%2015.0))

すでにインストールされている15.3のアンインストールに大変苦労しました。
Visual Studio Uninstallerなるものがあるようですが、自前の環境ではうまく作動せず。
結局マニュアルで1つずつアンインストールしました。

Visual Studio 2017.15.0を入れなおし、なんとか本エラーを解決することができました。
（一回目はCS0006が発生して焦ったけど、App削除してUnityでビルドしなおしたら通りました。）

## この時の環境
- Unity 2017.1.0f3
- Visual Studio 2017.15.0
- Windows 10 SDK 10.0.14393
- HoloToolkit使用/未使用（どちらも試しました）


# 議論
この問題に関して現在も議論しているスレッドのリンクを貼っておきます。
問題が解決したらまた更新します。

- Github | Microsoft/MixedRealityToolkit-Unity [Fail to compile under VS2017](https://github.com/Microsoft/MixedRealityToolkit-Unity/issues/885)
- Github | Microsoft/MixedRealityToolkit-Unity [Building UWP in all versions of Unity not working for Visual Studio 2017 15.3](https://github.com/Microsoft/MixedRealityToolkit-Unity/issues/860)
- Unity Community Support | Windows [.NET scripting backend and Visual Studio 2017.3 incompatibility](https://forum.unity3d.com/threads/net-scripting-backend-and-visual-studio-2017-3-incompatibility.487833/)