From 7bc687194f33f83a4273518745dfa0718f82cff8 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Mon, 16 Feb 2026 11:49:34 +0100 Subject: [PATCH] Fix Web to run without dotnet --- Source/Editor/Cooker/CookingData.h | 5 +++++ Source/Editor/Cooker/GameCooker.cpp | 2 ++ Source/Editor/Cooker/Platform/Web/WebPlatformTools.cpp | 2 +- Source/Editor/Cooker/Steps/DeployDataStep.cpp | 10 ++++++++-- .../Editor/Cooker/Steps/PrecompileAssembliesStep.cpp | 7 +++++-- Source/Engine/Scripting/Scripting.cpp | 2 ++ Source/Tools/Flax.Build/Build/DotNet/DotNetAOT.cs | 5 +++++ 7 files changed, 28 insertions(+), 5 deletions(-) diff --git a/Source/Editor/Cooker/CookingData.h b/Source/Editor/Cooker/CookingData.h index 88b23d6bc..ddc02fa67 100644 --- a/Source/Editor/Cooker/CookingData.h +++ b/Source/Editor/Cooker/CookingData.h @@ -193,6 +193,11 @@ enum class DotNetAOTModes /// Use Mono AOT to cross-compile all used C# assemblies into native platform static libraries which can be linked into a single shared library. /// MonoAOTStatic, + + /// + /// Target platform doesn't support .NET or it has been disabled. + /// + NoDotnet, }; extern FLAXENGINE_API const Char* ToString(const BuildPlatform platform); diff --git a/Source/Editor/Cooker/GameCooker.cpp b/Source/Editor/Cooker/GameCooker.cpp index 4dbe680cf..c7acfa2d8 100644 --- a/Source/Editor/Cooker/GameCooker.cpp +++ b/Source/Editor/Cooker/GameCooker.cpp @@ -189,6 +189,8 @@ const Char* ToString(const DotNetAOTModes mode) return TEXT("MonoAOTDynamic"); case DotNetAOTModes::MonoAOTStatic: return TEXT("MonoAOTStatic"); + case DotNetAOTModes::NoDotnet: + return TEXT("NoDotnet"); default: return TEXT(""); } diff --git a/Source/Editor/Cooker/Platform/Web/WebPlatformTools.cpp b/Source/Editor/Cooker/Platform/Web/WebPlatformTools.cpp index d1ed7fb9a..ab7a3aaa0 100644 --- a/Source/Editor/Cooker/Platform/Web/WebPlatformTools.cpp +++ b/Source/Editor/Cooker/Platform/Web/WebPlatformTools.cpp @@ -36,7 +36,7 @@ ArchitectureType WebPlatformTools::GetArchitecture() const DotNetAOTModes WebPlatformTools::UseAOT() const { - return DotNetAOTModes::MonoAOTStatic; + return DotNetAOTModes::NoDotnet; } PixelFormat WebPlatformTools::GetTextureFormat(CookingData& data, TextureBase* texture, PixelFormat format) diff --git a/Source/Editor/Cooker/Steps/DeployDataStep.cpp b/Source/Editor/Cooker/Steps/DeployDataStep.cpp index 775b040de..c0cf2e809 100644 --- a/Source/Editor/Cooker/Steps/DeployDataStep.cpp +++ b/Source/Editor/Cooker/Steps/DeployDataStep.cpp @@ -39,17 +39,23 @@ bool DeployDataStep::Perform(CookingData& data) } String dstDotnet = data.DataOutputPath / TEXT("Dotnet"); const DotNetAOTModes aotMode = data.Tools->UseAOT(); - const bool usAOT = aotMode != DotNetAOTModes::None; + const bool usAOT = aotMode != DotNetAOTModes::None && aotMode != DotNetAOTModes::NoDotnet; if (usAOT) { // Deploy Dotnet files into intermediate cooking directory for AOT FileSystem::DeleteDirectory(dstDotnet); dstDotnet = data.ManagedCodeOutputPath; } - if (buildSettings.SkipDotnetPackaging && data.Tools->UseSystemDotnet()) + if (aotMode == DotNetAOTModes::NoDotnet) + { + // No .NET + FileSystem::DeleteDirectory(dstDotnet); + } + else if (buildSettings.SkipDotnetPackaging && data.Tools->UseSystemDotnet()) { // Use system-installed .NET Runtime FileSystem::DeleteDirectory(dstDotnet); + LOG(Info, "Not using .NET Runtime"); } else { diff --git a/Source/Editor/Cooker/Steps/PrecompileAssembliesStep.cpp b/Source/Editor/Cooker/Steps/PrecompileAssembliesStep.cpp index 626b532a6..30d3fdcbc 100644 --- a/Source/Editor/Cooker/Steps/PrecompileAssembliesStep.cpp +++ b/Source/Editor/Cooker/Steps/PrecompileAssembliesStep.cpp @@ -12,7 +12,9 @@ void PrecompileAssembliesStep::OnBuildStarted(CookingData& data) { const DotNetAOTModes aotMode = data.Tools->UseAOT(); - if (aotMode == DotNetAOTModes::None || EnumHasAllFlags(data.Options, BuildOptions::NoCook)) + if (aotMode == DotNetAOTModes::None || + aotMode == DotNetAOTModes::NoDotnet || + EnumHasAllFlags(data.Options, BuildOptions::NoCook)) return; const auto& buildSettings = *BuildSettings::Get(); @@ -49,7 +51,8 @@ void PrecompileAssembliesStep::OnBuildStarted(CookingData& data) bool PrecompileAssembliesStep::Perform(CookingData& data) { const DotNetAOTModes aotMode = data.Tools->UseAOT(); - if (aotMode == DotNetAOTModes::None) + if (aotMode == DotNetAOTModes::None || + aotMode == DotNetAOTModes::NoDotnet) return false; const auto& buildSettings = *BuildSettings::Get(); if (buildSettings.SkipDotnetPackaging && data.Tools->UseSystemDotnet()) diff --git a/Source/Engine/Scripting/Scripting.cpp b/Source/Engine/Scripting/Scripting.cpp index aa7e26674..9b8439528 100644 --- a/Source/Engine/Scripting/Scripting.cpp +++ b/Source/Engine/Scripting/Scripting.cpp @@ -573,6 +573,7 @@ bool Scripting::Load() auto* flaxEngineModule = (NativeBinaryModule*)GetBinaryModuleFlaxEngine(); if (!flaxEngineModule->Assembly->IsLoaded()) { +#if USE_CSHARP String flaxEnginePath = Globals::BinariesFolder / TEXT("FlaxEngine.CSharp.dll"); #if USE_MONO_AOT if (!FileSystem::FileExists(flaxEnginePath)) @@ -583,6 +584,7 @@ bool Scripting::Load() LOG(Error, "Failed to load FlaxEngine C# assembly."); return true; } +#endif flaxEngineModule->CanReload = false; flaxEngineModule->Assembly->_canReload = false; onEngineLoaded(flaxEngineModule->Assembly); diff --git a/Source/Tools/Flax.Build/Build/DotNet/DotNetAOT.cs b/Source/Tools/Flax.Build/Build/DotNet/DotNetAOT.cs index 96551a91d..c9db8fd64 100644 --- a/Source/Tools/Flax.Build/Build/DotNet/DotNetAOT.cs +++ b/Source/Tools/Flax.Build/Build/DotNet/DotNetAOT.cs @@ -33,6 +33,11 @@ namespace Flax.Build /// Use Mono AOT to cross-compile all used C# assemblies into native platform static libraries which can be linked into a single shared library. /// MonoAOTStatic, + + /// + /// Target platform doesn't support .NET or it has been disabled. + /// + NoDotnet, } partial class Configuration