- OS:Windows11
- Unityバージョン:2022.3.5f1
- Arborバージョン:3.9.8
手元の環境では以下の組み合わせで上記の現象が発生しました。
Unity環境では参照が足りないdll:UnitGenerator
Reflectionを用いたライブラリ:Rider Flow、netcode for GameObject(のNetworkManagerEditor)
■再現方法
1. Unityプロジェクトを新規作成
2. UnitGeneratorのdllをインポート、dllのインスペクターでAny Platform・Include Platformをすべて無効にし、「RoslynAnalyzer」ラベルをつける
3. RiderFlowをインポート
4. RiderFlowの各機能が動作することを確認する
5. Arborをインポート
6. RiderFlowが動作しなくなる
■調査結果
Arborの入ったプロジェクトだと AppDomain.CurrentDomain.GetAssemblies() で返ってくる Assembly[] に UnitGenerator の Assembly が含まれるようになります(Arborが入ってないプロジェクトだと含まれない)。UnitGenerator の Assembly の GetTypes() を呼ぶと以下の例外が発生します。
Code: Select all
ReflectionTypeLoadException: Exception of type 'System.Reflection.ReflectionTypeLoadException' was thrown.
Could not load file or assembly 'Microsoft.CodeAnalysis, Version=3.9.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies.
Arborの入ったプロジェクトだと AppDomain.CurrentDomain.GetAssemblies() に UnitGenerator が含まれるようになるのは、ArborEditor.ClassList でプロジェクト内の dll を読み込んでいるのが原因のようでした。
■個人的推察
ArborEditor.ClassList.IsValidPlugin(PluginImporter pluginImporter) の中の if (!pluginImporter.GetCompatibleWithEditor()) って実は if (pluginImporter.GetCompatibleWithEditor()) の間違いだったりしませんか?
(コードの意図とか全然理解できてないのでまったく違ったこと言ってたらすみません…)