示例#1
0
        /// <summary>
        ///     Constructor
        /// </summary>
        /// <param name="metaData">Metadata</param>
        public MDEmitter(MetaData metaData)
        {
            this.metaData = metaData;

            // We could get these from the metadata tables but it's just easier to get name,
            // declaring type etc using TypeDef and MethodDef.

            tokenToTypeDef   = new Dictionary <uint, TypeDef>(metaData.TablesHeap.TypeDefTable.Rows);
            tokenToMethodDef = new Dictionary <uint, MethodDef>(metaData.TablesHeap.MethodTable.Rows);
            foreach (var type in metaData.Module.GetTypes())
            {
                if (type == null)
                {
                    continue;
                }
                tokenToTypeDef.Add(new MDToken(Table.TypeDef, metaData.GetRid(type)).Raw, type);
                foreach (var method in type.Methods)
                {
                    if (method == null)
                    {
                        continue;
                    }
                    tokenToMethodDef.Add(new MDToken(Table.Method, metaData.GetRid(method)).Raw, method);
                }
            }
        }
 /// <summary>
 ///     Constructor
 /// </summary>
 /// <param name="writer">Symbol writer</param>
 /// <param name="pdbState">PDB state</param>
 /// <param name="metaData">Meta data</param>
 public PdbWriter(ISymbolWriter2 writer, PdbState pdbState, MetaData metaData)
 {
     if (writer == null)
     {
         throw new ArgumentNullException("writer");
     }
     if (pdbState == null)
     {
         throw new ArgumentNullException("pdbState");
     }
     if (metaData == null)
     {
         throw new ArgumentNullException("metaData");
     }
     this.writer   = writer;
     this.pdbState = pdbState;
     this.metaData = metaData;
     module        = metaData.Module;
     writer.Initialize(metaData);
 }