もくじ
現象
複数のプロジェクトにジェネレート対象のクラスを定義しているが、1度のmocで対象にしたいプロジェクトが1個だけの場合、入力するプロジェクトがShared Projectを参照していると参照していないプロジェクトのコードもジェネレートしてしまう。
例えば次の通り。
MagicOnion-Server.csprojをmocに入力するとして、MagicOnion-ServerSharedはプロジェクト参照していないので含んでほしくない。
これでmocを実行する。
"C:/git/_Sandbox/MagicOnion_Shared/Tools/MagicOnionCodeGenerator/win-x64/moc.exe" -i "C:/git/_Sandbox/MagicOnion_Shared/MagicOnion-Server/MagicOnion-Server/MagicOnion-Server.csproj" -o "C:/git/_Sandbox/MagicOnion_Shared/MagicOnion-Client/Assets/Scripts/Generated/MagicOnion.Generated.cs"
次のように参照していないプロジェクトのコードが生成される。
意図せずに生成されてしまう側はShared Projectだけでなく、すべてのプロジェクトを対象に走査される。
原因
Shared Projectを参照していた場合、shprojのあるフォルダの親の親を起点にファイルを検索してしまうため。リポジトリの最新のコードでも同じ事が起きる。(2023/8/10現在)
対処
以下3つくらいありそう。
- リポジトリからコードを落としてきて該当箇所を修正してmocをビルドしなおす
- シンボルを定義して必要な箇所を指定してmocを実行する
- Shared Projectにフォルダ挟んで1階層深める
手っ取り早く運用が楽そうなのは3つ目。
srcフォルダを作って、shprojを含むファイルをすべてsrc配下に移動する。
これでmocを実行すると想定通りのコードが生成される。