internal override VfsEntry GetEntry(int index, string[] path) { if (path[path.Length - 1].EndsWith(".class", StringComparison.Ordinal)) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); for (int i = index; i < path.Length - 1; i++) { sb.Append(path[i]).Append('.'); } sb.Append(path[path.Length - 1], 0, path[path.Length - 1].Length - 6); string className = sb.ToString(); VfsEntry entry; lock (classes) { if (classes.TryGetValue(className, out entry)) { return(entry); } } AssemblyClassLoader acl = AssemblyClassLoader.FromAssembly(asm); TypeWrapper tw = null; try { tw = acl.LoadClassByDottedNameFast(className); } catch { } if (tw != null && !tw.IsArray) { lock (classes) { if (!classes.TryGetValue(className, out entry)) { entry = new VfsAssemblyClass(tw); classes.Add(className, entry); } } return(entry); } return(null); } else { Populate(); return(base.GetEntry(index, path)); } }
internal override VfsEntry GetEntry(int index, string[] path) { if (path[path.Length - 1].EndsWith(".class", StringComparison.Ordinal)) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); for (int i = index; i < path.Length - 1; i++) { sb.Append(path[i]).Append('.'); } sb.Append(path[path.Length - 1], 0, path[path.Length - 1].Length - 6); string className = sb.ToString(); VfsEntry entry; lock (classes) { if (classes.TryGetValue(className, out entry)) { return entry; } } AssemblyClassLoader acl = AssemblyClassLoader.FromAssembly(asm); TypeWrapper tw = null; try { tw = acl.LoadClassByDottedNameFast(className); } catch { } if (tw != null && !tw.IsArray) { lock (classes) { if (!classes.TryGetValue(className, out entry)) { entry = new VfsAssemblyClass(tw); classes.Add(className, entry); } } return entry; } return null; } else { Populate(); return base.GetEntry(index, path); } }