public static SharpAssembly LoadFrom(string filename, bool fromGAC) { // lock the assembly object in case that the preload thread is conflicting with another lock (typeof(SharpAssembly)) { AssemblyReader read = new AssemblyReader(); read.Load(filename); SharpAssembly asm = new SharpAssembly(read, fromGAC); asm.LoadReferences(); asm.LoadNestedTypeTable(); asm.LoadAttributeTable(); asm.LoadFieldConstants(); return asm; } }
public static SharpAssemblyName GetNameOfReference(AssemblyReader asm, uint AsmRefIndex) { SharpAssemblyName name = new SharpAssemblyName(); if ((AssemblyRef[])asm.MetadataTable.Tables[AssemblyRef.TABLE_ID] == null) return name; AssemblyRef aref = ((AssemblyRef[])asm.MetadataTable.Tables[AssemblyRef.TABLE_ID])[AsmRefIndex]; name.Name = asm.GetStringFromHeap(aref.Name); name.Version = new Version(aref.Major, aref.Minor, aref.Build, aref.Revision); name.Culture = asm.GetStringFromHeap(aref.Culture); name.Flags = aref.Flags; name.PublicKey = asm.GetBlobFromHeap(aref.PublicKeyOrToken); return name; }
internal SharpAssembly(AssemblyReader Reader, bool FromGac) { reader = Reader; tables = new MetadataTables(reader); // cache Name object internalName = GetAssemblyName(); fromGAC = FromGac; fullNamePool[this.FullName] = this; if (!shortNamePool.ContainsKey(this.Name)) { shortNamePool[this.Name] = this; } }
public static SharpAssemblyName GetAssemblyName(AssemblyReader asm) { SharpAssemblyName name = new SharpAssemblyName(); if ((Rows.Assembly[])asm.MetadataTable.Tables[Rows.Assembly.TABLE_ID] == null) return name; Rows.Assembly arow = ((Rows.Assembly[])asm.MetadataTable.Tables[Rows.Assembly.TABLE_ID])[1]; name.Name = asm.GetStringFromHeap(arow.Name); name.Version = new Version(arow.MajorVersion, arow.MinorVersion, arow.BuildNumber, arow.RevisionNumber); name.Culture = asm.GetStringFromHeap(arow.Culture); name.Flags = arow.Flags; name.PublicKey = asm.GetBlobFromHeap(arow.PublicKey); return name; }
public MetadataTables(AssemblyReader Reader) { reader = Reader; }