Horde and .NET Framework 9 apps

I created a c# console app using the .net 9 framework with the goal of having Horde run this app on a schedule every day. I basically created a simple Build Graph with a “spawn” tag and had it call the executable I created. I ran the .NET Core and Desktop Runtime 9.0.0 installer on all the Horde agents beforehand. However, when I execute the job, I get the following error. Am I missing something?

========== Starting: Scrape ==========

Running: <path to exe>

You must install or update .NET to run this application.

App: <path to exe>

Architecture: x64

Framework: ‘Microsoft.NETCore.App’, version ‘9.0.0’ (x64)

.NET location: E:\HordeAgent\Sandbox\Demo-Inc-Full\Sync\Engine\Binaries\ThirdParty\DotNet\8.0.300\win-x64

The following frameworks were found:

8.0.5 at [E:\HordeAgent\Sandbox\Demo-Inc-Full\Sync\Engine\Binaries\ThirdParty\DotNet\8.0.300\win-x64\shared\Microsoft.NETCore.App]

Learn more:

To install missing framework, download:

Steps to Reproduce

  1. Create dotnet 9 app
  2. Create build graph that calls it via <spawn> tag
  3. Schedule build graph in Horde
  4. Execute job

Good morning,

I would suggest sticking with even version dotnet releases as these are intended to be LTS versions. Epic’s dotnet version policy is also to only move the engine to even numbered releases.

If there is a pressing need to use dotnet9 the option would be to make a self contained app, though I wouldn’t recommend that, hope this helps

Is there a reason horde can’t simply run the exe even if the agent itself has all the dotnet runtime dependencies?

Yes, because UAT and other machinery explicitly uses, looks for, and sets dotnet version to 8, which is the supported version.

.NET location: E:\HordeAgent\Sandbox\Demo-Inc-Full\Sync\Engine\Binaries\ThirdParty\DotNet\8.0.300\win-x64

Specifically this in UAT:

rem add the dotnet sdk in the repo as the current dotnet sdk
set UE_DOTNET_VERSION=8.0.300
set UE_DOTNET_DIR=%~dp0..\..\Binaries\ThirdParty\DotNet\%UE_DOTNET_VERSION%\%UE_DOTNET_ARCH%
set PATH=%UE_DOTNET_DIR%;%PATH%
set DOTNET_ROOT=%UE_DOTNET_DIR%

Thank you Josh. I decided to use the self-contained publish for now but will consider downgrading the version for future compatibility.