stride3d/stride · error · NotImplementedException

Need to reimplement this to use IUnloadable

Error message

Need to reimplement this to use IUnloadable

What it means

LiveAssemblyReloader.Reload is a stub: the live assembly reloading feature (hot-swapping game assemblies in the running debugger target) was disabled pending a rewrite on top of IUnloadable. The method throws NotImplementedException immediately after initializing collections; all legacy reloading code is compiled out with #if FALSE.

Solutions

  1. Do not use live assembly reloading; rebuild and restart the debugged game process instead.
  2. If you own this code, reimplement Reload using IUnloadable (the message itself states the intended approach).
  3. Guard the calling feature so the reload UI/action is disabled until the feature is reimplemented.

Example fix

// before
var reloadedComponents = new List<ReloadedComponentEntryLive>();
throw new NotImplementedException("Need to reimplement this to use IUnloadable");

// after (caller-side guard)
if (liveReloadSupported)
    liveAssemblyReloader.Reload(assembliesToUnregister);
else
    restartGameProcess();
Defensive patterns

Strategy: fallback

Prevention

When it happens

Trigger: Any call to LiveAssemblyReloader.Reload, i.e. whenever the Stride editor/game debugger attempts a live reload of modified game assemblies at GameDebugger... flow through LiveAssemblyReloader.cs:33.

Common situations: Editing game code and expecting hot reload of assemblies while the game is being debugged in the editor; triggering 'Reload assemblies' from editor tooling; automated tests invoking Reload.

Related errors


AI-assisted analysis of stride3d/stride@96fad776d2 (2026-09-14). Data as JSON: /api/errors/34ebf54060ae9972. Report an issue: GitHub.

Appendix: source

Thrown at sources/engine/Stride.Debugger/Debugger/LiveAssemblyReloader.cs:33

using Stride.Engine;

namespace Stride.Debugger
{
    public static class LiveAssemblyReloader
    {
        public static void Reload(Game game, AssemblyContainer assemblyContainer, List<Assembly> assembliesToUnregister, List<Assembly> assembliesToRegister)
        {
            List<Entity> entities = new List<Entity>();

            if (game != null)
                entities.AddRange(game.SceneSystem.SceneInstance);

            CloneReferenceSerializer.References = new List<object>();

            var loadedAssembliesSet = new HashSet<Assembly>(assembliesToUnregister);
            var reloadedComponents = new List<ReloadedComponentEntryLive>();

            throw new NotImplementedException("Need to reimplement this to use IUnloadable");
#if FALSE
            foreach (var assembly in assembliesToUnregister)
            {
                // Unregisters assemblies that have been registered in Package.Load => Package.LoadAssemblyReferencesForPackage
                AssemblyRegistry.Unregister(assembly);

                // Unload binary serialization
                DataSerializerFactory.UnregisterSerializationAssembly(assembly);

                // Unload assembly
                assemblyContainer.UnloadAssembly(assembly);
            }

            foreach (var assembly in assembliesToRegister)
            {
                ModuleRuntimeHelpers.RunModuleConstructor(assembly.ManifestModule);

                // Unregisters assemblies that have been registered in Package.Load => Package.LoadAssemblyReferencesForPackage

View on GitHub (pinned to 96fad776d2)