UE5.5.4でInstalledBuildを作成すると、SwarmCoordinatorのコンパイルに失敗する件の修正方法について

お世話になっております。

UE5.5.1からUE5.5.4にアップデートしたところ、InstalledBuildの作成に失敗するようになりました。

こちらと同様の症状が起きているようです。

[Content removed]

こちら、UE5.5.4の環境でどのように対処するのが良いのか、教えていただくことはできますでしょうか。

UE5.6へのアップデートはできないのですが、5.6で修正されているようであれば、その修正内容だけ適用することはできるかもしれません。

なお、InstalledBuildの作成は、下記コマンドにて行っております。

RunUAT.bat BuildGraph -target=Make Installed Build Win64 -script=Engine/Build/InstalledEngineBuild.xml -set:WithDDC=false -set:WithFullDebugInfo=true -set:HostPlatformOnly=true -set:WithPS5=false -BuildMachine

お手数おかけしますが、ご確認のほどよろしくお願いいたします。

お世話になっております。

リンクして頂いたケースで議論されている内容と同じ問題だと思われます。

UE5.5.4 で対応する場合、以下の修正ようにsawrmのコンパイルをInstalledBuildから除外するのは方法の1つです。

https://github.com/EpicGames/UnrealEngine/commit/b86e244161df5bb32030818a48ffeccd3ed310ef

もしくは以下のスレッドにあるように、手動でSwarmCoordinatorをコンパイルする方法が挙げられます。

[Content removed]

UE5.6においてはソリューション作成時にSwarmCoordinatorのcsprojectが含まれてコンパイル対象から除外されるように変更されました。

ご連絡が遅くなりまして申し訳ございません。

1,3 について一度CLをUE5.5に適用して動作の結果をお知らせしたいと思いますので今しばらくお待ち下さい。

お時間を頂き恐れ入りますが、どうぞよろしくお願いします。

お世話になっております。

ひとまず UE5.5.4 の InstalledBuild を作成する分には、ご提示頂いたコマンドを利用して特に問題やエラー等が発生せずにコンパイルをパスしてInstalledBuildが作成できることは確認できました。SwarmCoordinator関連については何かエンジン構築前に設定やプロジェクトの追加などを行われておりましたでしょうか?おそらく以下のスレッドと同じエラーが発生していたと推測してこちらを確認しました。

[Content removed]

ここで起きている内容を整理しますと、UE5.6ではSwarm Coordinator及びSwarm Agentが廃止されるように幾つかの修正が行われていました。UE5.6はまだ完全に廃止してはいませんが段階的に廃止を検討している状況です。それらは.Net4.7を利用しているため現行の.Net8 がサポートされておらずコンパイルエラーが出ているものと思われます。以下の修正によってコンパイル対象から除外されました。

https://github.com/EpicGames/UnrealEngine/commit/b86e244161df5bb32030818a48ffeccd3ed310ef

UE5.6.1でリリースされますが一部ライトビルド時にSwarm関連のコンポーネントが残る問題がありましたが以下の変更で修正されました。

https://github.com/EpicGames/UnrealEngine/commit/b2a2fbe24a5eec6f90c0427db980af5e1e8e41d8

UE5.6でも同様のことを行いたい場合はSwarm関連の.csprojを.Net8に更新する必要があります。

<TargetFramework>net8.0</TargetFramework>これだけで.Netの変更は対応できますが、これ以外にコードの変更が必要かどうかは検証されていないため、引き続きカスタマイズしてアップデートをご検討なされている場合は、.Netバージョンの変更後にコードの変更が他に必要ないかどうかをご確認頂けますと幸いです。

ログ情報についてご共有頂きありがとうございます。

確かにこちらで特に問題がないので、ローカル環境の違いはあるかもしれません。特にUE5.5.1→5.5.4にて必要な.Netのバージョンが変わったという情報は見つけられなかったのですが、試すことができる方法は幾つかありそうです。

x64の.NET/MSBuild を使っているか確認

where dotnet
"C:\Engine\P4\Engine\Binaries\ThirdParty\DotNET\8.0.300\win-x64\dotnet.exe" --info

・NuGet/MSBuild キャッシュをクリア

# Engine 同梱の dotnet で実行するのが安全
"C:\Engine\P4\Engine\Binaries\ThirdParty\DotNET\8.0.300\win-x64\dotnet.exe" nuget locals all --clear
 
# MSBuild の SDK リゾルバ等キャッシュ
rd /s /q "%LOCALAPPDATA%\Microsoft\MSBuild\SdkResolverCache" 2>$null
rd /s /q "%LOCALAPPDATA%\NuGet\v3-cache" 2>$null
rd /s /q "%USERPROFILE%\.nuget\packages\nuget.build.tasks" 2>$null

・生成物/中間物を消して再生成

# 自動生成されたCsToolsを消す
rd /s /q "D:\p4ws_installed\ue5\engine\Engine\Saved\CsTools" 2>$null
 
# プロジェクトファイル再生成(必要なら)
"C:\Engine\P4\Engine\Build\BatchFiles\GenerateProjectFiles.bat"

・SwarmCoordinator を x64 で直接ビルドして確認

"C:\Engine\P4\Engine\Binaries\ThirdParty\DotNET\8.0.300\win-x64\dotnet.exe" build "D:\p4ws_installed\ue5\engine\Engine\Saved\CsTools\Engine\Source\Programs\UnrealSwarm\SwarmCoordinator\SwarmCoordinator.csproj" -r win-x64 -v mこちらで確認した環境では以下のような状況となっておりました。

.NET SDK:
 Version:           9.0.304
 Commit:            f12f5f689e
 Workload version:  9.0.300-manifests.f6623afb
 MSBuild version:   17.14.16+5d8159c5f
 
ランタイム環境:
 OS Name:     Windows
 OS Version:  10.0.26100
 OS Platform: Windows
 RID:         win-x64
 Base Path:   C:\Program Files\dotnet\sdk\9.0.304\

ご確認頂きありがとうございます。

> githubのリンクを共有いただいた「swarmのコンパイルをInstalledBuildから除外する」変更がありますが、こちらを適用するとInstalledBuildの作成が可能となります。

ただし、実際に作成されたInstalledBuildの中にはSwarmAgentなどが含まれていないため、このままチーム内に配布はできません。

そうですね、こちらはInstalledBuildのコンパイル対象からSwarm関連を除外する変更となるため、Swarmのコンパイルをしてチームに配布することが目的である場合は正しい変更ではないことになります。こちらご説明および私の認識があやまっており失礼いたしました。

> 除外されたツール類のみ以前のInstalledBuildに含まれているものをそのまま使う、という方法を考えたのですが、こちらの方法について、何か起きうるは問題などありますでしょうか?

UE5.5からSwarmに対する変更がなければ、特に問題や影響はないと思われます。もしくはソースビルド時にSwarm関連のプロジェクトのコンパイルが出来ているのであれば、ソースビルドでコンパイルしたものを後からInstalledBuildにコピーするのも1つの回避策として挙げられます。

ご確認頂きありがとうございました。

ひとまずソースビルドでのコンパイルおよびコピーで回避可能とのことで、こちらの方法を回避して頂けますと幸いです。

根本では5.6でスクリプトの修正によりswarmのコンパイルをスキップすることで回避は可能なのですが、SwarmがInstalledbuildが作成できない状況には変わらないのでライトマップベイクを利用する際には問題として残っています。この件については現在変更を行った担当者に確認を行っておりますので、どう対処していくかも踏まえてアップデートがありましたらお報せしたいと思います。

修正方法をご提示していただきありがとうございます。

>UE5.5.4 で対応する場合、以下の修正ようにsawrmのコンパイルをInstalledBuildから除外するのは方法の1つです。

https://github.com/EpicGames/UnrealEngine/commit/b86e244161df5bb32030818a48ffeccd3ed310ef

こちらの内容ですが、現在自分のほうがgithubにアクセスできず修正内容が確認できていないのですが、こちらを適用したとしても、InstalledBuildを使用している環境でSwarmを使用したライトビルドは問題なく行えるという認識であっていますでしょうか?

>もしくは以下のスレッドにあるように、手動でSwarmCoordinatorをコンパイルする方法が挙げられます。

[Content removed]

こちらは試してみたのですが、こちらの環境では問題が解消されませんでした。InstalledBuild作成の手順などの問題かもしれません。

>UE5.6においてはソリューション作成時にSwarmCoordinatorのcsprojectが含まれてコンパイル対象から除外されるように変更されました。

こちらの変更点のみを現在のUE5.5.4環境にエンジン改造として適用することは可能でしょうか?

2つ目の方法はうまくいかなかったため、現状だと1つ目か3つ目の対応になるのかと考えています。

1つ目と3つ目の方法について、それぞれ回答いただくことできますでしょうか。

お手数おかけして申し訳ありませんが、よろしくお願いいたします。

承知いたしました。

お手数おかけいたしますが、よろしくお願いいたします。

さきほどgithubのほうアクセスできるようになり変更点が確認できましたので、こちらでも変更内容を適用したInstalledBuildの動作を確認してみようと思います。

なお、githubのほうのコメントとして以下のリンクが記載されておりました。

これだけ見ると、やはりそのままではSwarmAgentが使えなく、Swarmを使用したライトビルドの分散ができないのかもしれません。

何か情報ありましたら、ご連絡いただければと思います。

よろしくお願いいたします。

お世話になっております。

ご確認いただきありがとうございます。

>SwarmCoordinator関連については何かエンジン構築前に設定やプロジェクトの追加などを行われておりましたでしょうか?

SwarmCoordinatorについては、特にこちらで追加や設定変更などは行っておりません。なお、提示していただいたスレッドと同様、InstalledBuild作成時に、下記のコンパイルエラーが発生しております。

D:\p4ws_installed\ue5\engine\Engine\Binaries\ThirdParty\DotNet\8.0.300\win-x64\sdk\8.0.300\NuGet.targets(439,5): error MSB4062: "NuGet.Build.Tasks.WarnForInvalidProjectsTask" タスクをアセンブリ D:\p4ws_installed\ue5\engine\Engine\Binaries\ThirdParty\DotNet\8.0.300\win-x64\sdk\8.0.300\NuGet.Build.Tasks.dll から読み込めませんでした。ファイルまたはアセンブリ 'NuGet.Build.Tasks, Version=6.10.0.97, Culture=neutral, PublicKeyToken=31bf3856ad364e35'、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。 <UsingTask> 宣言が正しいこと、アセンブリとその依存関係が使用可能であること、および Microsoft.Build.Framework.ITask を実装するパブリック クラスがタスクに含まれていることを確認してください。 [D:\p4ws_installed\ue5\engine\Engine\Saved\CsTools\Engine\Source\Programs\UnrealSwarm\SwarmCoordinator\SwarmCoordinator.csproj]現状、Swarmによる分散を使用してライトビルド運用しているため、SwarmCoordinator/SwarmAgentを含めたUE5.5.4のInstalledBuildを作成したいと考えております。

そちらではUE5.5.4のInstalledBuildが作成できたということであれば、こちらの環境の.Net関連の問題が考えられるのですが、UE5.5.1→UE5.5.4にて必要になった.Netのバージョンなどが変わったということはありますでしょうか?

お手数おかけしますが、よろしくお願いします。

お世話になっております。

いただいた情報を元に試してみたのですが、結論としては症状変わらずエラーが出てしまうようです。

>NuGet/MSBuild キャッシュをクリア

こちらは試しましたが、特に症状は変わっておりません。

>生成物/中間物を消して再生成​

​D:\p4ws_installed\ue5\engine\Engine\Saved\CsToolsフォルダが見当たりませんでした。

>SwarmCoordinator を x64 で直接ビルドして確認​

ご提示いただいたパスにはSwarmCoordinator.csprojが存在しなかったのですが、​「D:\p4ws_installed\ue5\engine\Engine\Source\Programs\UnrealSwarm\SwarmCoordinator\SwarmCoordinator.csproj」があるため試しにこちらでビルドを行ってみました。

ただ、ビルドは通りませんでした。

x64の.NET/MSBuild を使っているか確認

こちらなのですが、適当なフォルダでwhere dotnetを実行すると、

C:\Program Files\dotnet\dotnet.exeと表示されました。

InstalledBuildを作成する際にはエンジンに付属しているdotnet(C:\Engine\P4\Engine\Binaries\ThirdParty\DotNET\8.0.300\win-x64\dotnet.exe)が使われるため、PC自体にインストールされているdotnetは使われないという認識です。

一応、PC本体にインストールしているdotnetのバージョンを合わせたりもしましたが、特に症状は変わっておりません。

なお、dotnet --infoの表示は以下となります。

D:\p4ws_installed\ue5\engine\Engine\Binaries\ThirdParty\DotNet\8.0.300\win-x64>dotnet --info
.NET SDK:
 Version:           8.0.300
 Commit:            326f6e68b2
 Workload version:  8.0.300-manifests.c1c70047
 MSBuild version:   17.10.4+10fbfbf2e
 
ランタイム環境:
 OS Name:     Windows
 OS Version:  10.0.19045
 OS Platform: Windows
 RID:         win-x64
 Base Path:   D:\p4ws_installed\ue5\engine\Engine\Binaries\ThirdParty\DotNet\8.0.300\win-x64\sdk\8.0.300\

​他に何か思い当たることや対策方法などありますでしょうか。​

お手数おかけしますが、ご確認のほどよろしくお願いいたします。​

お世話になっております。

追加で1件質問させてください。

githubのリンクを共有いただいた「swarmのコンパイルをInstalledBuildから除外する」変更がありますが、こちらを適用するとInstalledBuildの作成が可能となります。

ただし、実際に作成されたInstalledBuildの中にはSwarmAgentなどが含まれていないため、このままチーム内に配布はできません。

そこで、この変更を適用したInstalledBuildに対して、除外されたツール類のみ以前のInstalledBuildに含まれているものをそのまま使う、という方法を考えたのですが、こちらの方法について、何か起きうるは問題などありますでしょうか?

​UE5.5.1からの更新となるため、SwarmAgentなどはUE5.5.1のものが使われることになります。

​もし、何か情報有りましたらご共有いただけますと幸いです。

よろしくお願いいたします。

お世話になっております。

返信遅くなってしまい申し訳ありません。

>UE5.5からSwarmに対する変更がなければ、特に問題や影響はないと思われます。もしくはソースビルド時にSwarm関連のプロジェクトのコンパイルが出来ているのであれば、ソースビルドでコンパイルしたものを後からInstalledBuildにコピーするのも1つの回避策として挙げられます。

確認したところ、ソースビルドからのコンパイルは問題なくできておりました。

UE5.5.1のものを使用するより安全かと思われますので、こちらの方法で回避することにしました、ありがとうございます。

最終的には、sawrm関連のコンパイルをInstalledBuildから除外し、除外されたものは個別コンパイルにより手動でInstalledBuildに含めるという形で作成しました。

現在実際にこのInstalledBuildを使用しておりますが、今のところ特に問題は起きておりません。

根本的なビルドエラーが直っているわけではないので、何か追加で情報などあればこちらでも動作を確認しようかと考えておりますが、何かその後進展などありましたでしょうか。

特に無ければ、今後は今回採用した回避方法での運用を進めていこうと思います。

お手数おかけしますが、ご確認のほどよろしくお願いいたします。

承知いたしました、ご確認いただきありがとうございます。

情報更新されましたら、ご連絡いただければと思います。

よろしくお願いいたします。