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;
		}
		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 SharpAssemblyName[] GetReferencedAssemblies()
		{
			if (Tables.AssemblyRef == null) return new SharpAssemblyName[0];
			SharpAssemblyName[] ret = new SharpAssemblyName[Tables.AssemblyRef.GetUpperBound(0)];
			
			for (int i = 1; i <= Tables.AssemblyRef.GetUpperBound(0); ++i) {
				AssemblyRef aref = Tables.AssemblyRef[i];
				ret[i-1]           = new SharpAssemblyName();
				ret[i-1].Name      = reader.GetStringFromHeap(aref.Name);
				ret[i-1].Version   = new Version(aref.Major, aref.Minor, aref.Build, aref.Revision);
				ret[i-1].Culture   = reader.GetStringFromHeap(aref.Culture);
				ret[i-1].Flags     = aref.Flags;
				ret[i-1].PublicKey = reader.GetBlobFromHeap(aref.PublicKeyOrToken);
				ret[i-1].RefId     = i;
			}
			
			return ret;
		}
		public SharpAssemblyName GetAssemblyName()
		{
			SharpAssemblyName name = new SharpAssemblyName();

			if (Tables.Assembly == null) return name;
			
			Rows.Assembly arow = Tables.Assembly[1];
			
			name.Name      = reader.GetStringFromHeap(arow.Name);
			name.Version   = new Version(arow.MajorVersion, arow.MinorVersion, arow.BuildNumber, arow.RevisionNumber);
			name.Culture   = reader.GetStringFromHeap(arow.Culture);
			name.Flags     = arow.Flags;
			name.PublicKey = reader.GetBlobFromHeap(arow.PublicKey);
			
			return name;
		}
		public static SharpAssembly Load(SharpAssemblyName name)
		{
			return Load(name.FullName, Environment.CurrentDirectory);
		}