# System.Reflection.Metadata.Ecma335

``` diff
+namespace System.Reflection.Metadata.Ecma335 {
+    public readonly struct ArrayShapeEncoder {
+        public ArrayShapeEncoder(BlobBuilder builder);
+        public BlobBuilder Builder { get; }
+        public void Shape(int rank, ImmutableArray<int> sizes, ImmutableArray<int> lowerBounds);
+    }
+    public readonly struct BlobEncoder {
+        public BlobEncoder(BlobBuilder builder);
+        public BlobBuilder Builder { get; }
+        public void CustomAttributeSignature(Action<FixedArgumentsEncoder> fixedArguments, Action<CustomAttributeNamedArgumentsEncoder> namedArguments);
+        public void CustomAttributeSignature(out FixedArgumentsEncoder fixedArguments, out CustomAttributeNamedArgumentsEncoder namedArguments);
+        public SignatureTypeEncoder FieldSignature();
+        public LocalVariablesEncoder LocalVariableSignature(int variableCount);
+        public MethodSignatureEncoder MethodSignature(SignatureCallingConvention convention = SignatureCallingConvention.Default, int genericParameterCount = 0, bool isInstanceMethod = false);
+        public GenericTypeArgumentsEncoder MethodSpecificationSignature(int genericArgumentCount);
+        public NamedArgumentsEncoder PermissionSetArguments(int argumentCount);
+        public PermissionSetEncoder PermissionSetBlob(int attributeCount);
+        public MethodSignatureEncoder PropertySignature(bool isInstanceProperty = false);
+        public SignatureTypeEncoder TypeSpecificationSignature();
+    }
+    public static class CodedIndex {
+        public static int CustomAttributeType(EntityHandle handle);
+        public static int HasConstant(EntityHandle handle);
+        public static int HasCustomAttribute(EntityHandle handle);
+        public static int HasCustomDebugInformation(EntityHandle handle);
+        public static int HasDeclSecurity(EntityHandle handle);
+        public static int HasFieldMarshal(EntityHandle handle);
+        public static int HasSemantics(EntityHandle handle);
+        public static int Implementation(EntityHandle handle);
+        public static int MemberForwarded(EntityHandle handle);
+        public static int MemberRefParent(EntityHandle handle);
+        public static int MethodDefOrRef(EntityHandle handle);
+        public static int ResolutionScope(EntityHandle handle);
+        public static int TypeDefOrRef(EntityHandle handle);
+        public static int TypeDefOrRefOrSpec(EntityHandle handle);
+        public static int TypeOrMethodDef(EntityHandle handle);
+    }
+    public sealed class ControlFlowBuilder {
+        public ControlFlowBuilder();
+        public void AddCatchRegion(LabelHandle tryStart, LabelHandle tryEnd, LabelHandle handlerStart, LabelHandle handlerEnd, EntityHandle catchType);
+        public void AddFaultRegion(LabelHandle tryStart, LabelHandle tryEnd, LabelHandle handlerStart, LabelHandle handlerEnd);
+        public void AddFilterRegion(LabelHandle tryStart, LabelHandle tryEnd, LabelHandle handlerStart, LabelHandle handlerEnd, LabelHandle filterStart);
+        public void AddFinallyRegion(LabelHandle tryStart, LabelHandle tryEnd, LabelHandle handlerStart, LabelHandle handlerEnd);
+    }
+    public readonly struct CustomAttributeArrayTypeEncoder {
+        public CustomAttributeArrayTypeEncoder(BlobBuilder builder);
+        public BlobBuilder Builder { get; }
+        public CustomAttributeElementTypeEncoder ElementType();
+        public void ObjectArray();
+    }
+    public readonly struct CustomAttributeElementTypeEncoder {
+        public CustomAttributeElementTypeEncoder(BlobBuilder builder);
+        public BlobBuilder Builder { get; }
+        public void Boolean();
+        public void Byte();
+        public void Char();
+        public void Double();
+        public void Enum(string enumTypeName);
+        public void Int16();
+        public void Int32();
+        public void Int64();
+        public void PrimitiveType(PrimitiveSerializationTypeCode type);
+        public void SByte();
+        public void Single();
+        public void String();
+        public void SystemType();
+        public void UInt16();
+        public void UInt32();
+        public void UInt64();
+    }
+    public readonly struct CustomAttributeNamedArgumentsEncoder {
+        public CustomAttributeNamedArgumentsEncoder(BlobBuilder builder);
+        public BlobBuilder Builder { get; }
+        public NamedArgumentsEncoder Count(int count);
+    }
+    public readonly struct CustomModifiersEncoder {
+        public CustomModifiersEncoder(BlobBuilder builder);
+        public BlobBuilder Builder { get; }
+        public CustomModifiersEncoder AddModifier(EntityHandle type, bool isOptional);
+    }
+    public readonly struct EditAndContinueLogEntry : IEquatable<EditAndContinueLogEntry> {
+        public EditAndContinueLogEntry(EntityHandle handle, EditAndContinueOperation operation);
+        public EntityHandle Handle { get; }
+        public EditAndContinueOperation Operation { get; }
+        public override bool Equals(object obj);
+        public bool Equals(EditAndContinueLogEntry other);
+        public override int GetHashCode();
+    }
+    public enum EditAndContinueOperation {
+        AddEvent = 5,
+        AddField = 2,
+        AddMethod = 1,
+        AddParameter = 3,
+        AddProperty = 4,
+        Default = 0,
+    }
+    public readonly struct ExceptionRegionEncoder {
+        public BlobBuilder Builder { get; }
+        public bool HasSmallFormat { get; }
+        public ExceptionRegionEncoder Add(ExceptionRegionKind kind, int tryOffset, int tryLength, int handlerOffset, int handlerLength, EntityHandle catchType = default(EntityHandle), int filterOffset = 0);
+        public ExceptionRegionEncoder AddCatch(int tryOffset, int tryLength, int handlerOffset, int handlerLength, EntityHandle catchType);
+        public ExceptionRegionEncoder AddFault(int tryOffset, int tryLength, int handlerOffset, int handlerLength);
+        public ExceptionRegionEncoder AddFilter(int tryOffset, int tryLength, int handlerOffset, int handlerLength, int filterOffset);
+        public ExceptionRegionEncoder AddFinally(int tryOffset, int tryLength, int handlerOffset, int handlerLength);
+        public static bool IsSmallExceptionRegion(int startOffset, int length);
+        public static bool IsSmallRegionCount(int exceptionRegionCount);
+    }
+    public static class ExportedTypeExtensions {
+        public static int GetTypeDefinitionId(this ExportedType exportedType);
+    }
+    public readonly struct FixedArgumentsEncoder {
+        public FixedArgumentsEncoder(BlobBuilder builder);
+        public BlobBuilder Builder { get; }
+        public LiteralEncoder AddArgument();
+    }
+    public enum FunctionPointerAttributes {
+        HasExplicitThis = 96,
+        HasThis = 32,
+        None = 0,
+    }
+    public readonly struct GenericTypeArgumentsEncoder {
+        public GenericTypeArgumentsEncoder(BlobBuilder builder);
+        public BlobBuilder Builder { get; }
+        public SignatureTypeEncoder AddArgument();
+    }
+    public enum HeapIndex {
+        Blob = 2,
+        Guid = 3,
+        String = 1,
+        UserString = 0,
+    }
+    public readonly struct InstructionEncoder {
+        public InstructionEncoder(BlobBuilder codeBuilder, ControlFlowBuilder controlFlowBuilder = null);
+        public BlobBuilder CodeBuilder { get; }
+        public ControlFlowBuilder ControlFlowBuilder { get; }
+        public int Offset { get; }
+        public void Branch(ILOpCode code, LabelHandle label);
+        public void Call(EntityHandle methodHandle);
+        public void Call(MemberReferenceHandle methodHandle);
+        public void Call(MethodDefinitionHandle methodHandle);
+        public void Call(MethodSpecificationHandle methodHandle);
+        public void CallIndirect(StandaloneSignatureHandle signature);
+        public LabelHandle DefineLabel();
+        public void LoadArgument(int argumentIndex);
+        public void LoadArgumentAddress(int argumentIndex);
+        public void LoadConstantI4(int value);
+        public void LoadConstantI8(long value);
+        public void LoadConstantR4(float value);
+        public void LoadConstantR8(double value);
+        public void LoadLocal(int slotIndex);
+        public void LoadLocalAddress(int slotIndex);
+        public void LoadString(UserStringHandle handle);
+        public void MarkLabel(LabelHandle label);
+        public void OpCode(ILOpCode code);
+        public void StoreArgument(int argumentIndex);
+        public void StoreLocal(int slotIndex);
+        public void Token(int token);
+        public void Token(EntityHandle handle);
+    }
+    public readonly struct LabelHandle : IEquatable<LabelHandle> {
+        public int Id { get; }
+        public bool IsNil { get; }
+        public override bool Equals(object obj);
+        public bool Equals(LabelHandle other);
+        public override int GetHashCode();
+        public static bool operator ==(LabelHandle left, LabelHandle right);
+        public static bool operator !=(LabelHandle left, LabelHandle right);
+    }
+    public readonly struct LiteralEncoder {
+        public LiteralEncoder(BlobBuilder builder);
+        public BlobBuilder Builder { get; }
+        public ScalarEncoder Scalar();
+        public void TaggedScalar(Action<CustomAttributeElementTypeEncoder> type, Action<ScalarEncoder> scalar);
+        public void TaggedScalar(out CustomAttributeElementTypeEncoder type, out ScalarEncoder scalar);
+        public void TaggedVector(Action<CustomAttributeArrayTypeEncoder> arrayType, Action<VectorEncoder> vector);
+        public void TaggedVector(out CustomAttributeArrayTypeEncoder arrayType, out VectorEncoder vector);
+        public VectorEncoder Vector();
+    }
+    public readonly struct LiteralsEncoder {
+        public LiteralsEncoder(BlobBuilder builder);
+        public BlobBuilder Builder { get; }
+        public LiteralEncoder AddLiteral();
+    }
+    public readonly struct LocalVariablesEncoder {
+        public LocalVariablesEncoder(BlobBuilder builder);
+        public BlobBuilder Builder { get; }
+        public LocalVariableTypeEncoder AddVariable();
+    }
+    public readonly struct LocalVariableTypeEncoder {
+        public LocalVariableTypeEncoder(BlobBuilder builder);
+        public BlobBuilder Builder { get; }
+        public CustomModifiersEncoder CustomModifiers();
+        public SignatureTypeEncoder Type(bool isByRef = false, bool isPinned = false);
+        public void TypedReference();
+    }
+    public sealed class MetadataAggregator {
+        public MetadataAggregator(IReadOnlyList<int> baseTableRowCounts, IReadOnlyList<int> baseHeapSizes, IReadOnlyList<MetadataReader> deltaReaders);
+        public MetadataAggregator(MetadataReader baseReader, IReadOnlyList<MetadataReader> deltaReaders);
+        public Handle GetGenerationHandle(Handle handle, out int generation);
+    }
+    public sealed class MetadataBuilder {
+        public MetadataBuilder(int userStringHeapStartOffset = 0, int stringHeapStartOffset = 0, int blobHeapStartOffset = 0, int guidHeapStartOffset = 0);
+        public AssemblyDefinitionHandle AddAssembly(StringHandle name, Version version, StringHandle culture, BlobHandle publicKey, AssemblyFlags flags, AssemblyHashAlgorithm hashAlgorithm);
+        public AssemblyFileHandle AddAssemblyFile(StringHandle name, BlobHandle hashValue, bool containsMetadata);
+        public AssemblyReferenceHandle AddAssemblyReference(StringHandle name, Version version, StringHandle culture, BlobHandle publicKeyOrToken, AssemblyFlags flags, BlobHandle hashValue);
+        public ConstantHandle AddConstant(EntityHandle parent, object value);
+        public CustomAttributeHandle AddCustomAttribute(EntityHandle parent, EntityHandle constructor, BlobHandle value);
+        public CustomDebugInformationHandle AddCustomDebugInformation(EntityHandle parent, GuidHandle kind, BlobHandle value);
+        public DeclarativeSecurityAttributeHandle AddDeclarativeSecurityAttribute(EntityHandle parent, DeclarativeSecurityAction action, BlobHandle permissionSet);
+        public DocumentHandle AddDocument(BlobHandle name, GuidHandle hashAlgorithm, BlobHandle hash, GuidHandle language);
+        public void AddEncLogEntry(EntityHandle entity, EditAndContinueOperation code);
+        public void AddEncMapEntry(EntityHandle entity);
+        public EventDefinitionHandle AddEvent(EventAttributes attributes, StringHandle name, EntityHandle type);
+        public void AddEventMap(TypeDefinitionHandle declaringType, EventDefinitionHandle eventList);
+        public ExportedTypeHandle AddExportedType(TypeAttributes attributes, StringHandle @namespace, StringHandle name, EntityHandle implementation, int typeDefinitionId);
+        public FieldDefinitionHandle AddFieldDefinition(FieldAttributes attributes, StringHandle name, BlobHandle signature);
+        public void AddFieldLayout(FieldDefinitionHandle field, int offset);
+        public void AddFieldRelativeVirtualAddress(FieldDefinitionHandle field, int offset);
+        public GenericParameterHandle AddGenericParameter(EntityHandle parent, GenericParameterAttributes attributes, StringHandle name, int index);
+        public GenericParameterConstraintHandle AddGenericParameterConstraint(GenericParameterHandle genericParameter, EntityHandle constraint);
+        public ImportScopeHandle AddImportScope(ImportScopeHandle parentScope, BlobHandle imports);
+        public InterfaceImplementationHandle AddInterfaceImplementation(TypeDefinitionHandle type, EntityHandle implementedInterface);
+        public LocalConstantHandle AddLocalConstant(StringHandle name, BlobHandle signature);
+        public LocalScopeHandle AddLocalScope(MethodDefinitionHandle method, ImportScopeHandle importScope, LocalVariableHandle variableList, LocalConstantHandle constantList, int startOffset, int length);
+        public LocalVariableHandle AddLocalVariable(LocalVariableAttributes attributes, int index, StringHandle name);
+        public ManifestResourceHandle AddManifestResource(ManifestResourceAttributes attributes, StringHandle name, EntityHandle implementation, uint offset);
+        public void AddMarshallingDescriptor(EntityHandle parent, BlobHandle descriptor);
+        public MemberReferenceHandle AddMemberReference(EntityHandle parent, StringHandle name, BlobHandle signature);
+        public MethodDebugInformationHandle AddMethodDebugInformation(DocumentHandle document, BlobHandle sequencePoints);
+        public MethodDefinitionHandle AddMethodDefinition(MethodAttributes attributes, MethodImplAttributes implAttributes, StringHandle name, BlobHandle signature, int bodyOffset, ParameterHandle parameterList);
+        public MethodImplementationHandle AddMethodImplementation(TypeDefinitionHandle type, EntityHandle methodBody, EntityHandle methodDeclaration);
+        public void AddMethodImport(MethodDefinitionHandle method, MethodImportAttributes attributes, StringHandle name, ModuleReferenceHandle module);
+        public void AddMethodSemantics(EntityHandle association, MethodSemanticsAttributes semantics, MethodDefinitionHandle methodDefinition);
+        public MethodSpecificationHandle AddMethodSpecification(EntityHandle method, BlobHandle instantiation);
+        public ModuleDefinitionHandle AddModule(int generation, StringHandle moduleName, GuidHandle mvid, GuidHandle encId, GuidHandle encBaseId);
+        public ModuleReferenceHandle AddModuleReference(StringHandle moduleName);
+        public void AddNestedType(TypeDefinitionHandle type, TypeDefinitionHandle enclosingType);
+        public ParameterHandle AddParameter(ParameterAttributes attributes, StringHandle name, int sequenceNumber);
+        public PropertyDefinitionHandle AddProperty(PropertyAttributes attributes, StringHandle name, BlobHandle signature);
+        public void AddPropertyMap(TypeDefinitionHandle declaringType, PropertyDefinitionHandle propertyList);
+        public StandaloneSignatureHandle AddStandaloneSignature(BlobHandle signature);
+        public void AddStateMachineMethod(MethodDefinitionHandle moveNextMethod, MethodDefinitionHandle kickoffMethod);
+        public TypeDefinitionHandle AddTypeDefinition(TypeAttributes attributes, StringHandle @namespace, StringHandle name, EntityHandle baseType, FieldDefinitionHandle fieldList, MethodDefinitionHandle methodList);
+        public void AddTypeLayout(TypeDefinitionHandle type, ushort packingSize, uint size);
+        public TypeReferenceHandle AddTypeReference(EntityHandle resolutionScope, StringHandle @namespace, StringHandle name);
+        public TypeSpecificationHandle AddTypeSpecification(BlobHandle signature);
+        public BlobHandle GetOrAddBlob(byte[] value);
+        public BlobHandle GetOrAddBlob(ImmutableArray<byte> value);
+        public BlobHandle GetOrAddBlob(BlobBuilder value);
+        public BlobHandle GetOrAddBlobUTF16(string value);
+        public BlobHandle GetOrAddBlobUTF8(string value, bool allowUnpairedSurrogates = true);
+        public BlobHandle GetOrAddConstantBlob(object value);
+        public BlobHandle GetOrAddDocumentName(string value);
+        public GuidHandle GetOrAddGuid(Guid guid);
+        public StringHandle GetOrAddString(string value);
+        public UserStringHandle GetOrAddUserString(string value);
+        public int GetRowCount(TableIndex table);
+        public ImmutableArray<int> GetRowCounts();
+        public ReservedBlob<GuidHandle> ReserveGuid();
+        public ReservedBlob<UserStringHandle> ReserveUserString(int length);
+        public void SetCapacity(HeapIndex heap, int byteCount);
+        public void SetCapacity(TableIndex table, int rowCount);
+    }
+    public static class MetadataReaderExtensions {
+        public static IEnumerable<EditAndContinueLogEntry> GetEditAndContinueLogEntries(this MetadataReader reader);
+        public static IEnumerable<EntityHandle> GetEditAndContinueMapEntries(this MetadataReader reader);
+        public static int GetHeapMetadataOffset(this MetadataReader reader, HeapIndex heapIndex);
+        public static int GetHeapSize(this MetadataReader reader, HeapIndex heapIndex);
+        public static BlobHandle GetNextHandle(this MetadataReader reader, BlobHandle handle);
+        public static StringHandle GetNextHandle(this MetadataReader reader, StringHandle handle);
+        public static UserStringHandle GetNextHandle(this MetadataReader reader, UserStringHandle handle);
+        public static int GetTableMetadataOffset(this MetadataReader reader, TableIndex tableIndex);
+        public static int GetTableRowCount(this MetadataReader reader, TableIndex tableIndex);
+        public static int GetTableRowSize(this MetadataReader reader, TableIndex tableIndex);
+        public static IEnumerable<TypeDefinitionHandle> GetTypesWithEvents(this MetadataReader reader);
+        public static IEnumerable<TypeDefinitionHandle> GetTypesWithProperties(this MetadataReader reader);
+        public static SignatureTypeKind ResolveSignatureTypeKind(this MetadataReader reader, EntityHandle typeHandle, byte rawTypeKind);
+    }
+    public sealed class MetadataRootBuilder {
+        public MetadataRootBuilder(MetadataBuilder tablesAndHeaps, string metadataVersion = null, bool suppressValidation = false);
+        public string MetadataVersion { get; }
+        public MetadataSizes Sizes { get; }
+        public bool SuppressValidation { get; }
+        public void Serialize(BlobBuilder builder, int methodBodyStreamRva, int mappedFieldDataStreamRva);
+    }
+    public sealed class MetadataSizes {
+        public ImmutableArray<int> ExternalRowCounts { get; }
+        public ImmutableArray<int> HeapSizes { get; }
+        public ImmutableArray<int> RowCounts { get; }
+        public int GetAlignedHeapSize(HeapIndex index);
+    }
+    public static class MetadataTokens {
+        public static readonly int HeapCount;
+        public static readonly int TableCount;
+        public static AssemblyFileHandle AssemblyFileHandle(int rowNumber);
+        public static AssemblyReferenceHandle AssemblyReferenceHandle(int rowNumber);
+        public static BlobHandle BlobHandle(int offset);
+        public static ConstantHandle ConstantHandle(int rowNumber);
+        public static CustomAttributeHandle CustomAttributeHandle(int rowNumber);
+        public static CustomDebugInformationHandle CustomDebugInformationHandle(int rowNumber);
+        public static DeclarativeSecurityAttributeHandle DeclarativeSecurityAttributeHandle(int rowNumber);
+        public static DocumentHandle DocumentHandle(int rowNumber);
+        public static DocumentNameBlobHandle DocumentNameBlobHandle(int offset);
+        public static EntityHandle EntityHandle(int token);
+        public static EntityHandle EntityHandle(TableIndex tableIndex, int rowNumber);
+        public static EventDefinitionHandle EventDefinitionHandle(int rowNumber);
+        public static ExportedTypeHandle ExportedTypeHandle(int rowNumber);
+        public static FieldDefinitionHandle FieldDefinitionHandle(int rowNumber);
+        public static GenericParameterConstraintHandle GenericParameterConstraintHandle(int rowNumber);
+        public static GenericParameterHandle GenericParameterHandle(int rowNumber);
+        public static int GetHeapOffset(BlobHandle handle);
+        public static int GetHeapOffset(GuidHandle handle);
+        public static int GetHeapOffset(Handle handle);
+        public static int GetHeapOffset(this MetadataReader reader, Handle handle);
+        public static int GetHeapOffset(StringHandle handle);
+        public static int GetHeapOffset(UserStringHandle handle);
+        public static int GetRowNumber(EntityHandle handle);
+        public static int GetRowNumber(this MetadataReader reader, EntityHandle handle);
+        public static int GetToken(EntityHandle handle);
+        public static int GetToken(Handle handle);
+        public static int GetToken(this MetadataReader reader, EntityHandle handle);
+        public static int GetToken(this MetadataReader reader, Handle handle);
+        public static GuidHandle GuidHandle(int offset);
+        public static Handle Handle(int token);
+        public static EntityHandle Handle(TableIndex tableIndex, int rowNumber);
+        public static ImportScopeHandle ImportScopeHandle(int rowNumber);
+        public static InterfaceImplementationHandle InterfaceImplementationHandle(int rowNumber);
+        public static LocalConstantHandle LocalConstantHandle(int rowNumber);
+        public static LocalScopeHandle LocalScopeHandle(int rowNumber);
+        public static LocalVariableHandle LocalVariableHandle(int rowNumber);
+        public static ManifestResourceHandle ManifestResourceHandle(int rowNumber);
+        public static MemberReferenceHandle MemberReferenceHandle(int rowNumber);
+        public static MethodDebugInformationHandle MethodDebugInformationHandle(int rowNumber);
+        public static MethodDefinitionHandle MethodDefinitionHandle(int rowNumber);
+        public static MethodImplementationHandle MethodImplementationHandle(int rowNumber);
+        public static MethodSpecificationHandle MethodSpecificationHandle(int rowNumber);
+        public static ModuleReferenceHandle ModuleReferenceHandle(int rowNumber);
+        public static ParameterHandle ParameterHandle(int rowNumber);
+        public static PropertyDefinitionHandle PropertyDefinitionHandle(int rowNumber);
+        public static StandaloneSignatureHandle StandaloneSignatureHandle(int rowNumber);
+        public static StringHandle StringHandle(int offset);
+        public static bool TryGetHeapIndex(HandleKind type, out HeapIndex index);
+        public static bool TryGetTableIndex(HandleKind type, out TableIndex index);
+        public static TypeDefinitionHandle TypeDefinitionHandle(int rowNumber);
+        public static TypeReferenceHandle TypeReferenceHandle(int rowNumber);
+        public static TypeSpecificationHandle TypeSpecificationHandle(int rowNumber);
+        public static UserStringHandle UserStringHandle(int offset);
+    }
+    public enum MethodBodyAttributes {
+        InitLocals = 1,
+        None = 0,
+    }
+    public readonly struct MethodBodyStreamEncoder {
+        public MethodBodyStreamEncoder(BlobBuilder builder);
+        public BlobBuilder Builder { get; }
+        public MethodBodyStreamEncoder.MethodBody AddMethodBody(int codeSize, int maxStack, int exceptionRegionCount, bool hasSmallExceptionRegions, StandaloneSignatureHandle localVariablesSignature, MethodBodyAttributes attributes);
+        public MethodBodyStreamEncoder.MethodBody AddMethodBody(int codeSize, int maxStack = 8, int exceptionRegionCount = 0, bool hasSmallExceptionRegions = true, StandaloneSignatureHandle localVariablesSignature = default(StandaloneSignatureHandle), MethodBodyAttributes attributes = MethodBodyAttributes.InitLocals, bool hasDynamicStackAllocation = false);
+        public int AddMethodBody(InstructionEncoder instructionEncoder, int maxStack, StandaloneSignatureHandle localVariablesSignature, MethodBodyAttributes attributes);
+        public int AddMethodBody(InstructionEncoder instructionEncoder, int maxStack = 8, StandaloneSignatureHandle localVariablesSignature = default(StandaloneSignatureHandle), MethodBodyAttributes attributes = MethodBodyAttributes.InitLocals, bool hasDynamicStackAllocation = false);
+        public readonly struct MethodBody {
+            public ExceptionRegionEncoder ExceptionRegions { get; }
+            public Blob Instructions { get; }
+            public int Offset { get; }
+        }
+    }
+    public readonly struct MethodSignatureEncoder {
+        public MethodSignatureEncoder(BlobBuilder builder, bool hasVarArgs);
+        public BlobBuilder Builder { get; }
+        public bool HasVarArgs { get; }
+        public void Parameters(int parameterCount, Action<ReturnTypeEncoder> returnType, Action<ParametersEncoder> parameters);
+        public void Parameters(int parameterCount, out ReturnTypeEncoder returnType, out ParametersEncoder parameters);
+    }
+    public readonly struct NamedArgumentsEncoder {
+        public NamedArgumentsEncoder(BlobBuilder builder);
+        public BlobBuilder Builder { get; }
+        public void AddArgument(bool isField, Action<NamedArgumentTypeEncoder> type, Action<NameEncoder> name, Action<LiteralEncoder> literal);
+        public void AddArgument(bool isField, out NamedArgumentTypeEncoder type, out NameEncoder name, out LiteralEncoder literal);
+    }
+    public readonly struct NamedArgumentTypeEncoder {
+        public NamedArgumentTypeEncoder(BlobBuilder builder);
+        public BlobBuilder Builder { get; }
+        public void Object();
+        public CustomAttributeElementTypeEncoder ScalarType();
+        public CustomAttributeArrayTypeEncoder SZArray();
+    }
+    public readonly struct NameEncoder {
+        public NameEncoder(BlobBuilder builder);
+        public BlobBuilder Builder { get; }
+        public void Name(string name);
+    }
+    public readonly struct ParametersEncoder {
+        public ParametersEncoder(BlobBuilder builder, bool hasVarArgs = false);
+        public BlobBuilder Builder { get; }
+        public bool HasVarArgs { get; }
+        public ParameterTypeEncoder AddParameter();
+        public ParametersEncoder StartVarArgs();
+    }
+    public readonly struct ParameterTypeEncoder {
+        public ParameterTypeEncoder(BlobBuilder builder);
+        public BlobBuilder Builder { get; }
+        public CustomModifiersEncoder CustomModifiers();
+        public SignatureTypeEncoder Type(bool isByRef = false);
+        public void TypedReference();
+    }
+    public readonly struct PermissionSetEncoder {
+        public PermissionSetEncoder(BlobBuilder builder);
+        public BlobBuilder Builder { get; }
+        public PermissionSetEncoder AddPermission(string typeName, ImmutableArray<byte> encodedArguments);
+        public PermissionSetEncoder AddPermission(string typeName, BlobBuilder encodedArguments);
+    }
+    public sealed class PortablePdbBuilder {
+        public PortablePdbBuilder(MetadataBuilder tablesAndHeaps, ImmutableArray<int> typeSystemRowCounts, MethodDefinitionHandle entryPoint, Func<IEnumerable<Blob>, BlobContentId> idProvider = null);
+        public ushort FormatVersion { get; }
+        public Func<IEnumerable<Blob>, BlobContentId> IdProvider { get; }
+        public string MetadataVersion { get; }
+        public BlobContentId Serialize(BlobBuilder builder);
+    }
+    public readonly struct ReturnTypeEncoder {
+        public ReturnTypeEncoder(BlobBuilder builder);
+        public BlobBuilder Builder { get; }
+        public CustomModifiersEncoder CustomModifiers();
+        public SignatureTypeEncoder Type(bool isByRef = false);
+        public void TypedReference();
+        public void Void();
+    }
+    public readonly struct ScalarEncoder {
+        public ScalarEncoder(BlobBuilder builder);
+        public BlobBuilder Builder { get; }
+        public void Constant(object value);
+        public void NullArray();
+        public void SystemType(string serializedTypeName);
+    }
+    public readonly struct SignatureDecoder<TType, TGenericContext> {
+        public SignatureDecoder(ISignatureTypeProvider<TType, TGenericContext> provider, MetadataReader metadataReader, TGenericContext genericContext);
+        public TType DecodeFieldSignature(ref BlobReader blobReader);
+        public ImmutableArray<TType> DecodeLocalSignature(ref BlobReader blobReader);
+        public MethodSignature<TType> DecodeMethodSignature(ref BlobReader blobReader);
+        public ImmutableArray<TType> DecodeMethodSpecificationSignature(ref BlobReader blobReader);
+        public TType DecodeType(ref BlobReader blobReader, bool allowTypeSpecifications = false);
+    }
+    public readonly struct SignatureTypeEncoder {
+        public SignatureTypeEncoder(BlobBuilder builder);
+        public BlobBuilder Builder { get; }
+        public void Array(Action<SignatureTypeEncoder> elementType, Action<ArrayShapeEncoder> arrayShape);
+        public void Array(out SignatureTypeEncoder elementType, out ArrayShapeEncoder arrayShape);
+        public void Boolean();
+        public void Byte();
+        public void Char();
+        public CustomModifiersEncoder CustomModifiers();
+        public void Double();
+        public MethodSignatureEncoder FunctionPointer(SignatureCallingConvention convention = SignatureCallingConvention.Default, FunctionPointerAttributes attributes = FunctionPointerAttributes.None, int genericParameterCount = 0);
+        public GenericTypeArgumentsEncoder GenericInstantiation(EntityHandle genericType, int genericArgumentCount, bool isValueType);
+        public void GenericMethodTypeParameter(int parameterIndex);
+        public void GenericTypeParameter(int parameterIndex);
+        public void Int16();
+        public void Int32();
+        public void Int64();
+        public void IntPtr();
+        public void Object();
+        public SignatureTypeEncoder Pointer();
+        public void PrimitiveType(PrimitiveTypeCode type);
+        public void SByte();
+        public void Single();
+        public void String();
+        public SignatureTypeEncoder SZArray();
+        public void Type(EntityHandle type, bool isValueType);
+        public void UInt16();
+        public void UInt32();
+        public void UInt64();
+        public void UIntPtr();
+        public void VoidPointer();
+    }
+    public enum TableIndex : byte {
+        Assembly = (byte)32,
+        AssemblyOS = (byte)34,
+        AssemblyProcessor = (byte)33,
+        AssemblyRef = (byte)35,
+        AssemblyRefOS = (byte)37,
+        AssemblyRefProcessor = (byte)36,
+        ClassLayout = (byte)15,
+        Constant = (byte)11,
+        CustomAttribute = (byte)12,
+        CustomDebugInformation = (byte)55,
+        DeclSecurity = (byte)14,
+        Document = (byte)48,
+        EncLog = (byte)30,
+        EncMap = (byte)31,
+        Event = (byte)20,
+        EventMap = (byte)18,
+        EventPtr = (byte)19,
+        ExportedType = (byte)39,
+        Field = (byte)4,
+        FieldLayout = (byte)16,
+        FieldMarshal = (byte)13,
+        FieldPtr = (byte)3,
+        FieldRva = (byte)29,
+        File = (byte)38,
+        GenericParam = (byte)42,
+        GenericParamConstraint = (byte)44,
+        ImplMap = (byte)28,
+        ImportScope = (byte)53,
+        InterfaceImpl = (byte)9,
+        LocalConstant = (byte)52,
+        LocalScope = (byte)50,
+        LocalVariable = (byte)51,
+        ManifestResource = (byte)40,
+        MemberRef = (byte)10,
+        MethodDebugInformation = (byte)49,
+        MethodDef = (byte)6,
+        MethodImpl = (byte)25,
+        MethodPtr = (byte)5,
+        MethodSemantics = (byte)24,
+        MethodSpec = (byte)43,
+        Module = (byte)0,
+        ModuleRef = (byte)26,
+        NestedClass = (byte)41,
+        Param = (byte)8,
+        ParamPtr = (byte)7,
+        Property = (byte)23,
+        PropertyMap = (byte)21,
+        PropertyPtr = (byte)22,
+        StandAloneSig = (byte)17,
+        StateMachineMethod = (byte)54,
+        TypeDef = (byte)2,
+        TypeRef = (byte)1,
+        TypeSpec = (byte)27,
+    }
+    public readonly struct VectorEncoder {
+        public VectorEncoder(BlobBuilder builder);
+        public BlobBuilder Builder { get; }
+        public LiteralsEncoder Count(int count);
+    }
+}
```

