yotiky Tech Blog

とあるエンジニアの備忘録

MagicOnion で Shared Project (共有プロジェクト)を含むプロジェクトをジェネレートする時の注意点

もくじ

現象

複数のプロジェクトにジェネレート対象のクラスを定義しているが、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を実行すると想定通りのコードが生成される。