37 internal struct Record
40 internal ushort MajorVersion;
41 internal ushort MinorVersion;
42 internal ushort BuildNumber;
43 internal ushort RevisionNumber;
45 internal BlobHandle PublicKeyOrToken;
46 internal StringHandle
Name;
47 internal StringHandle Culture;
48 internal BlobHandle HashValue;
52 internal const int Index = 0x23;
54 internal int FindOrAddRecord(Record rec)
59 if (records[i].
Name == rec.Name &&
60 records[i].MajorVersion == rec.MajorVersion &&
61 records[i].MinorVersion == rec.MinorVersion &&
62 records[i].BuildNumber == rec.BuildNumber &&
63 records[i].RevisionNumber == rec.RevisionNumber &&
64 records[i].Flags == rec.Flags &&
65 records[i].PublicKeyOrToken == rec.PublicKeyOrToken &&
66 records[i].Culture == rec.Culture)
70 return AddRecord(rec);
75 for (
int i = 0; i < records.Length; i++)
77 records[i].MajorVersion = mr.ReadUInt16();
78 records[i].MinorVersion = mr.ReadUInt16();
79 records[i].BuildNumber = mr.ReadUInt16();
80 records[i].RevisionNumber = mr.ReadUInt16();
81 records[i].Flags = mr.ReadInt32();
82 records[i].PublicKeyOrToken = MetadataTokens.BlobHandle(mr.ReadBlobIndex());
83 records[i].Name = MetadataTokens.StringHandle(mr.ReadStringIndex());
84 records[i].Culture = MetadataTokens.StringHandle(mr.ReadStringIndex());
85 records[i].HashValue = MetadataTokens.BlobHandle(mr.ReadBlobIndex());
89 internal override void Write(ModuleBuilder module)
93 var h = module.Metadata.AddAssemblyReference(
95 new Version(records[i].MajorVersion, records[i].MinorVersion, records[i].BuildNumber, records[i].RevisionNumber),
97 records[i].PublicKeyOrToken,
98 (
System.Reflection.AssemblyFlags)records[i].Flags,
99 records[i].HashValue);
101 Debug.Assert(h == MetadataTokens.AssemblyReferenceHandle(i + 1));