/// <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; }
private IBSharpRuntimeProvider GetPrecompileClsProvider() { var provider = new BSharpGenericClassProvider(); foreach (var cls in _context.PreparedContext.Get(BSharpContextDataType.Working)) { var rcls = new BSharpRuntimeClass { Name = cls.Name, Namespace = cls.Namespace, PrototypeCode = cls.Prototype, Loaded = true, Definition = cls.Compiled }; provider.Set(rcls); } return provider; }