やらなイカ?

たぶん、iOS/Androidアプリの開発・テスト関係。

Unity 2021.2未満でも動作するRoslyn Analyzerプロジェクト

Unity 2020.2から制限付きながらRoslynアナライザが動作するようになり、その後、Unity 2021.1.2で実用段階に行き着いたことは以前ブロク記事で紹介しました。

www.nowsprinting.com

しかし、この時点でUnityエディター上で動作しない*1アナライザがありました。例えば次のものです*2

これらは、Unity 2021.2.0以降では動作するようになりました。

結論

調査を放置していたのですが改めて確認してみたところ、結論としては

  • Unity 2021.2から内包するMicrosoft.CodeAnalysis.CSharpバージョンがv3.5からv3.9に変更された
  • Microsoft.CodeAnalysis.CSharpのバージョン3.6以降を使用してビルドされたアナライザはUnity 2021.2未満では動作せず、2021.2以降では動作する
  • Microsoft.CodeAnalysis.CSharpのバージョン3.10以降を使用してビルドされたアナライザはUnity 2021.2以降でも動作しない[11/14追記]

というものでした。 したがって、自作アナライザをUnity 2021.2未満にも対応させたいのであれば、使用するMicrosoft.CodeAnalysis.CSharpはv3.5に固定すればよいということになります*3

テンプレートプロジェクト

こちらのリポジトリで、Unity 2021.2未満でも動作するアナライザプロジェクトのテンプレートを公開しています。 テンプレート初期化の確認中にミスってリポジトリ消してしまったので、以前☆つけてくれていた方はまたお願いします…。

github.com

内包するRoslynバージョンの確認方法

以下おまけです。

Unityに内包されているRoslyn関連ファイルは、macOSでは下記パスにあります。

Unity 2021.2未満

/Applications/Unity/Hub/Editor/2021.1.28f1/Unity.app/Contents/Tools/Roslyn/Microsoft.CodeAnalysis.CSharp.dll

2021.1.28f1の部分はUnityエディタのバージョン

Unity 2021.2以降

/Applications/Unity/Hub/Editor/2021.3.4f1/Unity.app/Contents/Tools/ScriptUpdater/Microsoft.CodeAnalysis.CSharp.dll

この中のdllファイルを、Windowsであればilasm.exeというツールで見て確認できるはずです。 macOSの場合、Visual Studio for Macでも見られるようです。

参考:方法: ファイルがアセンブリであるかどうかを確認する | Microsoft Learn

今回はJetBrains Riderで読み込んで、Project Explorerでファイル右クリック | View in Assembly Explorerで確認しました。

*1:本稿での「動作しない」は、何ひとつコンソールに出力されずエラーメッセージも得られないもの

*2:全部検証しているわけではないので他にもあるでしょう。またバージョンによって振る舞いが異なる可能性もあります

*3:とはいえ、前述の通りUnity 2020 LTSのアナライザサポートには問題があるため、実質アナライザを活用していくのはUnity 2021 LTS以降ということで気にしなくてよさそうですが