示例#1
0
        internal void ExportTypes(int fileToken, ModuleBuilder manifestModule)
        {
            Dictionary <Type, int> declaringTypes = new Dictionary <Type, int>();

            foreach (TypeBuilder type in types)
            {
                if (type != moduleType && IsVisible(type))
                {
                    ExportedTypeTable.Record rec = new ExportedTypeTable.Record();
                    rec.Flags     = (int)type.Attributes;
                    rec.TypeDefId = type.MetadataToken & 0xFFFFFF;
                    rec.TypeName  = manifestModule.Strings.Add(TypeNameParser.Unescape(type.Name));
                    string ns = type.Namespace;
                    rec.TypeNamespace = ns == null ? 0 : manifestModule.Strings.Add(TypeNameParser.Unescape(ns));
                    if (type.IsNested)
                    {
                        rec.Implementation = declaringTypes[type.DeclaringType];
                    }
                    else
                    {
                        rec.Implementation = fileToken;
                    }
                    int exportTypeToken = 0x27000000 | manifestModule.ExportedType.AddRecord(rec);
                    declaringTypes.Add(type, exportTypeToken);
                }
            }
        }
示例#2
0
 private int ExportType(Type type)
 {
     ExportedTypeTable.Record rec = new ExportedTypeTable.Record();
     rec.TypeDefId = type.MetadataToken;
     rec.TypeName  = this.Strings.Add(TypeNameParser.Unescape(type.Name));
     if (type.IsNested)
     {
         rec.Flags          = 0;
         rec.TypeNamespace  = 0;
         rec.Implementation = ExportType(type.DeclaringType);
     }
     else
     {
         rec.Flags = 0x00200000;                 // CorTypeAttr.tdForwarder
         string ns = type.Namespace;
         rec.TypeNamespace  = ns == null ? 0 : this.Strings.Add(TypeNameParser.Unescape(ns));
         rec.Implementation = ImportAssemblyRef(type.Assembly);
     }
     return(0x27000000 | this.ExportedType.FindOrAddRecord(rec));
 }