/// <summary>
        ///     Перегружает файл и формирует индекс на его основе
        /// </summary>
        protected override void RebuildIndex()
        {
            ReloadLibSource();
            XElement indexXml = XElement.Load(_fileSource.Open("/index"));

            foreach (XElement xcls in indexXml.Elements("class"))
            {
                string key = xcls.Attr("fullcode");
                if (!Cache.ContainsKey(key))
                {
                    var desc = new BSharpRuntimeClassDescriptor();
                    desc.Fullname     = key;
                    desc.ResourceName = xcls.Attr("uri");
                    var cls = new BSharpRuntimeClass(Container);
                    cls.Fullname      = key;
                    cls.Name          = xcls.Attr("code");
                    cls.Namespace     = xcls.Attr("namespace");
                    cls.PrototypeCode = xcls.Attr("prototype");
                    cls.RuntimeCode   = xcls.Attr("runtime");
                    cls.Loaded        = false;
                    desc.CachedClass  = cls;

                    Cache[key] = desc;
                }
            }
        }
        /// <summary>
        ///     Перегружает класс из файла на диске
        /// </summary>
        /// <param name="descriptor"></param>
        protected override void ReloadClass(BSharpRuntimeClassDescriptor descriptor)
        {
            XElement xml = XElement.Load(descriptor.ResourceName);
            var      cls = new BSharpRuntimeClass(Container)
            {
                Definition = xml
            };

            descriptor.CachedClass        = cls;
            descriptor.CachedClass.Loaded = true;
        }
        /// <summary>
        ///     Перегружает класс с диска
        /// </summary>
        /// <param name="descriptor"></param>
        protected override void ReloadClass(BSharpRuntimeClassDescriptor descriptor)
        {
            string uri = descriptor.ResourceName;

            if (null == descriptor.CachedClass)
            {
                descriptor.CachedClass = new BSharpRuntimeClass(Container);
            }
            var cls = (BSharpRuntimeClass)descriptor.CachedClass;

            cls.Definition = XElement.Load(_fileSource.Open(uri));
            cls.Loaded     = true;
        }
 /// <summary>
 ///     Строит список из всех кдассов с расширением ".bsclass"
 /// </summary>
 protected override void RebuildIndex()
 {
     Cache.Clear();
     foreach (
         string fn in
         Directory.GetFiles(RootDirectory, "*." + BSharpRuntimeDefaults.BSHARP_CLASS_FILE_EXTENSION,
                            SearchOption.AllDirectories))
     {
         if (IsStandaloneFile(RootDirectory, fn))
         {
             string fullname = Path.GetFileNameWithoutExtension(fn);
             var    desc     = new BSharpRuntimeClassDescriptor {
                 ResourceName = fn,
                 Fullname     = fullname,
                 LastWrite    = File.GetLastWriteTime(fn)
             };
             Cache[fullname] = desc;
         }
     }
 }
 /// <summary>
 ///     Проверяет наличие файла на диске и его время записи
 /// </summary>
 /// <param name="descriptor"></param>
 /// <returns></returns>
 protected override bool IsActual(BSharpRuntimeClassDescriptor descriptor)
 {
     return(descriptor.LastWrite >= File.GetLastWriteTime(descriptor.ResourceName));
 }
		/// <summary>
		///     Проверяет актуальность класса
		/// </summary>
		/// <param name="descriptor"></param>
		/// <returns></returns>
		protected virtual bool IsActual(BSharpRuntimeClassDescriptor descriptor){
			return true;
		}
		/// <summary>
		///     Перегружает класс с диска
		/// </summary>
		/// <param name="descriptor"></param>
		protected virtual void ReloadClass(BSharpRuntimeClassDescriptor descriptor){
		}