public void AssemblyRef_WhenConstructed_ValuesAreCorrect()
        {
            byte[] content =
            {
                0x04, 0x00,
                0x01, 0x00,
                0x00, 0x00,
                0x00, 0x00,
                0x00, 0x00, 0x00, 0x00,
                0x63, 0x03,
                0xD9, 0x03,
                0x00, 0x00,
                0x00, 0x00
            };
            IIndexDetails indexDetails = IndexHelper.CreateIndexDetails(2);

            AssemblyRefMetadataTableRow row = new AssemblyRefMetadataTableRow(content, 0, indexDetails);

            Assert.AreEqual("4.1.0.0", row.GetVersion().ToString());
            Assert.AreEqual(AssemblyFlags.SideBySideCompatible, row.Flags);
            Assert.AreEqual(867, row.PublicKeyOrToken);
            Assert.AreEqual(985, row.Name.Value);
            Assert.AreEqual(0, row.Culture.Value);
            Assert.AreEqual(0, row.HashValue);
        }
Exemplo n.º 2
0
 public AssemblyRefEntry(MetadataDirectory directory, AssemblyRefMetadataTableRow row)
 {
     this.FileOffset       = string.Format("0x{0:x}", row.FileOffset);
     this.Name             = ((StringStream)directory.Streams[Streams.StringStream]).GetString(row.Name.Value);
     this.Version          = row.GetVersion().ToString();
     this.Culture          = ((StringStream)directory.Streams[Streams.StringStream]).GetString(row.Culture.Value);
     this.HashValue        = row.HashValue.ToString();
     this.Flags            = row.Flags.ToString();
     this.PublicKeyOrToken = row.PublicKeyOrToken.ToString();
 }
        public void AssemblyRef_WhenConstructedWithIndexSizes_OffsetIsMovedOn(byte blobIndex, byte stringIndex, int expected)
        {
            IIndexDetails indexDetails = IndexHelper.CreateIndexDetails(2, stringIndex, blobIndex, 2);
            Offset        offset       = 0;

            byte[] content = new byte[30];

            AssemblyRefMetadataTableRow row = new AssemblyRefMetadataTableRow(content, offset, indexDetails);

            Assert.AreEqual(expected, offset.Current);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Initialises a new instance of the AssemblyRef class from the provided details.
        /// </summary>
        /// <param name="references">Container of all the references required to build this type.</param>
        /// <param name="row">The row that provides the assembly reference details.</param>
        /// <returns>A populated AssemblyRef instance.</returns>
        internal static AssemblyRef CreateFromMetadata(BuildReferences references, AssemblyRefMetadataTableRow row)
        {
            AssemblyRef assemblyRef = new AssemblyRef();

            assemblyRef.Version = new Version(
                row.MajorVersion,
                row.MinorVersion,
                row.BuildNumber,
                row.RevisionNumber);
            assemblyRef.Culture  = references.Assembly.StringStream.GetString(row.Culture.Value);
            assemblyRef.UniqueId = references.Assembly.CreateUniqueId();
            assemblyRef.Name     = references.Assembly.StringStream.GetString(row.Name.Value);
            assemblyRef.Assembly = references.Assembly;

            return(assemblyRef);
        }
        private AssemblyRefMetadataTableRow BuildTestMetadataRow()
        {
            AssemblyRefMetadataTableRow row = new AssemblyRefMetadataTableRow();

            row.MajorVersion   = 1;
            row.MinorVersion   = 4;
            row.BuildNumber    = 10;
            row.RevisionNumber = 1204;
            row.Culture        = new StringIndex {
                Value = CultureIndex
            };
            row.Name = new StringIndex {
                Value = NameIndex
            };
            return(row);
        }
        private void LoadAssemblyRefMetadata()
        {
            if (!_stream.Tables.ContainsKey(MetadataTables.AssemblyRef))
            {
                return;
            }

            MetadataRow[] items = _stream.Tables[MetadataTables.AssemblyRef];
            for (int i = 0; i < items.Length; i++)
            {
                AssemblyRefMetadataTableRow assemblyRefRow = items[i] as AssemblyRefMetadataTableRow;
                AssemblyRef assemblyRef = AssemblyRef.CreateFromMetadata(_references, assemblyRefRow);

                _map.Add(MetadataTables.AssemblyRef, assemblyRefRow, assemblyRef);
                _assembly.ReferencedAssemblies.Add(assemblyRef);
            }
        }
        public void AssemblyRef_Create_IsInitialisedCorrectlyFromSource()
        {
            Mock <IStringStream>        stringStream = new Mock <IStringStream>();
            AssemblyDef                 assemblyDef  = new AssemblyDef();
            BuildReferences             references   = new BuildReferences();
            AssemblyRefMetadataTableRow row          = BuildTestMetadataRow();

            references.Assembly      = assemblyDef;
            assemblyDef.StringStream = stringStream.Object;

            // setup string methods to return strings in createfrom... method
            stringStream.Setup(p => p.GetString(CultureIndex)).Returns("culture");
            stringStream.Setup(p => p.GetString(NameIndex)).Returns("name");

            AssemblyRef reference = AssemblyRef.CreateFromMetadata(references, row);

            Assert.AreEqual("1.4.10.1204", reference.Version.ToString());
            Assert.AreEqual("culture", reference.Culture);
            Assert.AreEqual("name", reference.Name);
            Assert.AreSame(assemblyDef, reference.Assembly);
        }