public virtual object LoadConfiguration(Type configType, string filename, ConfigFile parent)
        {
            ConfigFile configFile = null;
            TextReader textReader = null;

            filename = filename.Replace("$(AppDir)", PathHelper.AppDir);
            filename = filename.Replace("$(UserAppDir)", PathHelper.UserAppDir);
            filename = filename.Replace("$(BaseDir)", PathHelper.BaseDir);
            if (typeof(ConfigFile).IsAssignableFrom(configType))
            {
                if (File.Exists(filename + ".override"))
                {
                    try
                    {
                        String original      = File.ReadAllText(filename);
                        String overriding    = File.ReadAllText(filename + ".override");
                        String tabContent    = overriding.Replace("\n", "\n\t\t\t");
                        Int32  indexStart    = original.IndexOf(coloringStart);
                        Int32  indexEnd      = original.IndexOf(coloringEnd);
                        String replaceTarget = original.Substring(indexStart, indexEnd - indexStart + coloringEnd.Length);
                        String finalContent  = original.Replace(replaceTarget, tabContent);
                        File.WriteAllText(filename, finalContent);
                        File.Delete(filename + ".override");
                    }
                    catch { /* NO ERRORS... */ }
                }
                textReader          = new StreamReader(filename);
                configFile          = Deserialize(textReader, configType) as ConfigFile;
                configFile.filename = filename;
                configFile.init(this, parent);
            }
            return(configFile);
        }
        public virtual object LoadConfiguration(Type configType, string filename, ConfigFile parent)
        {
            ConfigFile configFile = null;
            Stream     stream     = null;
            TextReader textReader = null;

            configFile = null;
            if (typeof(ConfigFile).IsAssignableFrom(configType))
            {
                stream = OpenFile(filename, parent);
                if (stream != null)
                {
                    textReader          = new StreamReader(stream);
                    configFile          = Deserialize(textReader, configType) as ConfigFile;
                    configFile.filename = filename;
                    configFile.init(this, parent);
                }
            }
            return(configFile);
        }