Esempio n. 1
0
        public static MyModuleConfig LoadModuleConfig(FileInfo assemblyFile)
        {
            Assembly assembly = Assembly.LoadFrom(assemblyFile.FullName);
            string   xml      = MyResources.GetTextFromAssembly(assembly, MODULE_CONFIG_FILE);

            if (string.IsNullOrEmpty(xml))
            {
                throw new FileNotFoundException("Module config not found (resource \"nodes.xml\" missing for module " + assemblyFile.Name + ").");
            }

            YAXSerializer serializer = new YAXSerializer(typeof(MyModuleConfig),
                                                         YAXExceptionHandlingPolicies.ThrowErrorsOnly, YAXExceptionTypes.Warning);

            MyModuleConfig moduleConfig = (MyModuleConfig)serializer.Deserialize(xml);

            if (moduleConfig == null)
            {
                throw new YAXException("Module config parsing failed: " + serializer.ParsingErrors);
            }

            moduleConfig.Assembly = assembly;
            moduleConfig.File     = assemblyFile;

            moduleConfig.LoadConversionClass();

            moduleConfig.FinalizeNodeConfigs <MyNodeConfig>(moduleConfig.NodeConfigList);
            moduleConfig.FinalizeNodeConfigs <MyWorldConfig>(moduleConfig.WorldConfigList);

            return(moduleConfig);
        }
        private static void AddModuleFromAssembly(FileInfo file, bool basicNode = false)
        {
            try
            {
                MyModuleConfig moduleConfig = MyModuleConfig.LoadModuleConfig(file);

                Modules.Add(moduleConfig);
                AssemblyLookup[moduleConfig.Assembly] = moduleConfig;

                if (moduleConfig.NodeConfigList != null)
                {
                    foreach (MyNodeConfig nc in moduleConfig.NodeConfigList)
                    {
                        nc.IsBasicNode = basicNode;

                        if (nc.NodeType != null)
                        {
                            KnownNodes[nc.NodeType] = nc;
                        }
                    }
                }

                if (moduleConfig.WorldConfigList != null)
                {
                    foreach (MyWorldConfig wc in moduleConfig.WorldConfigList)
                    {
                        wc.IsBasicNode = basicNode;

                        if (wc.NodeType != null)
                        {
                            KnownWorlds[wc.NodeType] = wc;
                        }
                    }
                }

                MyLog.INFO.WriteLine("Module loaded: " + file.Name
                                     + (moduleConfig.Conversion != null ? " (version=" + moduleConfig.GetXmlVersion() + ")" : " (no versioning)"));
            }
            catch (Exception e)
            {
                MyLog.ERROR.WriteLine("Module loading failed: " + e.Message);

                if (basicNode)
                {
                    throw new MyModuleLoadingException("Core module loading failed (" + e.Message + ")", e);
                }
            }
        }
        private static void AddModuleFromAssembly(FileInfo file, bool basicNode = false)
        {
            try
            {
                MyModuleConfig moduleConfig = MyModuleConfig.LoadModuleConfig(file);

                Modules.Add(moduleConfig);
                AssemblyLookup[moduleConfig.Assembly.FullName] = moduleConfig;

                if (moduleConfig.NodeConfigList != null)
                {
                    foreach (MyNodeConfig nc in moduleConfig.NodeConfigList)
                    {
                        nc.IsBasicNode = basicNode;

                        if (nc.NodeType != null)
                        {
                            KnownNodes[nc.NodeType] = nc;
                        }
                    }
                }

                if (moduleConfig.WorldConfigList != null)
                {
                    foreach (MyWorldConfig wc in moduleConfig.WorldConfigList)
                    {
                        wc.IsBasicNode = basicNode;

                        if (wc.NodeType != null)
                        {
                            KnownWorlds[wc.NodeType] = wc;
                        }
                    }
                }

                if (moduleConfig.CategoryList != null)
                {
                    foreach (MyCategoryConfig categoryConfig in moduleConfig.CategoryList)
                    {
                        KnownCategories[categoryConfig.Name] = categoryConfig;
                    }
                }

                MyLog.INFO.WriteLine("Module loaded: " + file.Name
                                     +
                                     (moduleConfig.Conversion != null
                                         ? " (version=" + moduleConfig.GetXmlVersion() + ")"
                                         : " (no versioning)"));
            }
            catch (Exception e)
            {
                if (basicNode)
                {
                    throw new MyModuleLoadingException("Core module loading failed (" + e.Message + ")", e);
                }

                // We don't report the nodes.xml missing - the dll could still contain UI extensions.
                if (!(e is FileNotFoundException))
                {
                    MyLog.ERROR.WriteLine("Module loading failed: " + e.Message);
                }
            }
        }
Esempio n. 4
0
        private static void AddModuleFromAssembly(FileInfo file, bool basicNode = false)
        {
            try
            {
                MyModuleConfig moduleConfig = MyModuleConfig.LoadModuleConfig(file);

                Modules.Add(moduleConfig);
                AssemblyLookup[moduleConfig.Assembly.FullName] = moduleConfig;

                if (moduleConfig.NodeConfigList != null)
                {
                    foreach (MyNodeConfig nc in moduleConfig.NodeConfigList)
                    {
                        nc.IsBasicNode = basicNode;

                        if (nc.NodeType != null)
                        {
                            KnownNodes[nc.NodeType] = nc;
                        }
                    }
                }

                if (moduleConfig.WorldConfigList != null)
                {
                    foreach (MyWorldConfig wc in moduleConfig.WorldConfigList)
                    {
                        wc.IsBasicNode = basicNode;

                        if (wc.NodeType != null)
                        {
                            KnownWorlds[wc.NodeType] = wc;
                        }
                    }
                }

                if (moduleConfig.CategoryList != null)
                {
                    foreach (MyCategoryConfig categoryConfig in moduleConfig.CategoryList)
                    {
                        KnownCategories[categoryConfig.Name] = categoryConfig;
                    }
                }

                MyLog.INFO.WriteLine("Module loaded: " + file.Name
                                     +
                                     (moduleConfig.Conversion != null
                                         ? " (version=" + moduleConfig.GetXmlVersion() + ")"
                                         : " (no versioning)"));
            }
            catch (Exception e)
            {
                if (basicNode)
                {
                    throw new MyModuleLoadingException("Core module loading failed (" + e.Message + ")", e);
                }

                if (e is ResourceNotFoundException)
                {
                    // Missing nodes.xml is OK for UI extensions.
                    if (!file.Name.EndsWith(".GUI.dll"))
                    {
                        MyLog.INFO.WriteLine($"Module {file.Name} skipped for now (may be loaded as UI module): " + e.Message);
                    }
                }
                else
                {
                    MyLog.ERROR.WriteLine($"Module {file.Name} loading failed: " + e.Message);
                }
            }
        }