private static void LoadDelayedSubModules()
        {
            foreach (var mod in ModuleInfo.GetModules())
            {
                if (!mod.IsSelected)
                {
                    continue;
                }

                var id             = mod.Id;
                var subModsXmlPath = ModuleInfo.GetPath(id);
                var modDir         = Path.GetDirectoryName(subModsXmlPath);
                if (modDir == null)
                {
                    continue;
                }

                var subModsXml = new XmlDocument();
                subModsXml.Load(subModsXmlPath);
                var delayedSubMods = subModsXml.SelectNodes("/Module/DelayedSubModules/SubModule")?.OfType <XmlElement>();
                if (delayedSubMods == null)
                {
                    continue;
                }

                var main     = Module.CurrentModule;
                var typeMain = typeof(Module);

                foreach (var elem in delayedSubMods)
                {
                    var delayedSubModInfo = new SubModuleInfo();
                    delayedSubModInfo.LoadFrom(elem);

                    var dllPath = Path.Combine(modDir, "bin", Common.ConfigName, delayedSubModInfo.DLLName);

                    var subModAsm  = AssemblyLoader.LoadFrom(dllPath);
                    var subModType = subModAsm.GetType(delayedSubModInfo.SubModuleClassType);
                    if (!typeof(MBSubModuleBase).IsAssignableFrom(subModType))
                    {
                        continue;
                    }

                    var delayLoadedSubMod = (MBSubModuleBase)subModType.InvokeMember(".ctor",
                                                                                     BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.CreateInstance,
                                                                                     null, null, new object[0]);

                    typeMain.InvokeMember("AddSubModule",
                                          BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod,
                                          null, main, new object[] { subModAsm, delayedSubModInfo.SubModuleClassType });

                    var subMods = (ICollection <MBSubModuleBase>)typeMain.InvokeMember("_submodules",
                                                                                       BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField,
                                                                                       null, main, new object[0]);

                    subMods.Add(delayLoadedSubMod);

                    subModType.InvokeMember(nameof(OnSubModuleLoad),
                                            BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod,
                                            null, delayLoadedSubMod, new object[0]);
                }
            }
        }