Поделиться через


MetadataReader Класс

Определение

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

public ref class MetadataReader sealed
public sealed class MetadataReader
type MetadataReader = class
Public NotInheritable Class MetadataReader
Наследование
MetadataReader

Примеры

В этом примере показано, как создать MetadataReader сборку и прочитать все определения типов из него:

using var fs = new FileStream("Example.dll", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
using var peReader = new PEReader(fs);

MetadataReader mr = peReader.GetMetadataReader();

foreach (TypeDefinitionHandle tdefh in mr.TypeDefinitions)
{
    TypeDefinition tdef = mr.GetTypeDefinition(tdefh);

    string ns = mr.GetString(tdef.Namespace);
    string name = mr.GetString(tdef.Name);
    Console.WriteLine($"{ns}.{name}");
}

Комментарии

Предостережение

Этот тип не предназначен для обработки ненадежных входных данных. Неправильные или вредоносные метаданные могут привести к непредвиденному поведению, включая доступ к памяти вне границ, сбои или зависания. Используется MetadataReader только с доверенными метаданными, такими как метаданные из доверенных сборок.

MetadataReader считывает содержимое таблиц и куч из указанных метаданных CLI. Он работает с низким уровнем конструкций, таких как определения типов и методов. Дополнительные сведения об API более высокого уровня для проверки содержимого сборок с помощью конструкций отражения см. в разделе MetadataLoadContext.

Можно использовать конструкторы, например MetadataReader(Byte*, Int32), для создания экземпляра для заданного MetadataReader расположения памяти. Чтобы считывать метаданные из файла сборки переносимого исполняемого файла, создайте PEReader и используйте GetMetadataReader(PEReader) метод расширения.

Формат метаданных CLI определяется спецификацией ECMA-335. Дополнительные сведения см. в статье "Стандартная среда ECMA-335 — инфраструктура общего языка( CLI) на веб-сайте Ecma International.

Конструкторы

Имя Описание
MetadataReader(Byte*, Int32, MetadataReaderOptions, MetadataStringDecoder)

Инициализирует новый экземпляр MetadataReader класса из метаданных, хранящихся в указанном расположении памяти.

MetadataReader(Byte*, Int32, MetadataReaderOptions)

Инициализирует новый экземпляр MetadataReader класса из метаданных, хранящихся в указанном расположении памяти.

MetadataReader(Byte*, Int32)

Инициализирует новый экземпляр MetadataReader класса из метаданных, хранящихся в указанном расположении памяти.

Свойства

Имя Описание
AssemblyFiles

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

AssemblyReferences

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

CustomAttributes

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

CustomDebugInformation

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

DebugMetadataHeader

Получает сведения, декодированные из потока #Pdb или null если поток отсутствует.

DeclarativeSecurityAttributes

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

Documents

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

EventDefinitions

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

ExportedTypes

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

FieldDefinitions

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

ImportScopes

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

IsAssembly

Возвращает значение, указывающее, представляют ли метаданные сборку.

LocalConstants

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

LocalScopes

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

LocalVariables

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

ManifestResources

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

MemberReferences

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

MetadataKind

Возвращает тип метаданных.

MetadataLength

Возвращает длину базовых данных.

MetadataPointer

Возвращает указатель на базовые данные.

MetadataVersion

Возвращает строку версии, считываемую из заголовка метаданных.

MethodDebugInformation

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

MethodDefinitions

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

Options

Возвращает переданный MetadataReaderOptions конструктору.

PropertyDefinitions

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

StringComparer

Возвращает средство сравнения, используемое для сравнения строк, хранящихся в метаданных.

TypeDefinitions

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

TypeReferences

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

UTF8Decoder

Получает декодатор, используемый средством чтения для создания строковых экземпляров из последовательностей байтов, закодированных в кодировке UTF8.

Методы

Имя Описание
Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetAssemblyDefinition()

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetAssemblyFile(AssemblyFileHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetAssemblyName(String)

Возвращает заданный AssemblyName файл.

GetAssemblyReference(AssemblyReferenceHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetBlobBytes(BlobHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetBlobContent(BlobHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetBlobReader(BlobHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetBlobReader(StringHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetConstant(ConstantHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetCustomAttribute(CustomAttributeHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetCustomAttributes(EntityHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetCustomDebugInformation(CustomDebugInformationHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetCustomDebugInformation(EntityHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetDeclarativeSecurityAttribute(DeclarativeSecurityAttributeHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetDocument(DocumentHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetEventDefinition(EventDefinitionHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetExportedType(ExportedTypeHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetFieldDefinition(FieldDefinitionHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetGenericParameter(GenericParameterHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetGenericParameterConstraint(GenericParameterConstraintHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetGuid(GuidHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetImportScope(ImportScopeHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetInterfaceImplementation(InterfaceImplementationHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetLocalConstant(LocalConstantHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetLocalScope(LocalScopeHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetLocalScopes(MethodDebugInformationHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetLocalScopes(MethodDefinitionHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetLocalVariable(LocalVariableHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetManifestResource(ManifestResourceHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetMemberReference(MemberReferenceHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetMethodDebugInformation(MethodDebugInformationHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetMethodDebugInformation(MethodDefinitionHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetMethodDefinition(MethodDefinitionHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetMethodImplementation(MethodImplementationHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetMethodSpecification(MethodSpecificationHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetModuleDefinition()

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetModuleReference(ModuleReferenceHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetNamespaceDefinition(NamespaceDefinitionHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetNamespaceDefinitionRoot()

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetParameter(ParameterHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetPropertyDefinition(PropertyDefinitionHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetStandaloneSignature(StandaloneSignatureHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetString(DocumentNameBlobHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetString(NamespaceDefinitionHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetString(StringHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
GetTypeDefinition(TypeDefinitionHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetTypeReference(TypeReferenceHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetTypeSpecification(TypeSpecificationHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

GetUserString(UserStringHandle)

Считывает метаданные, определенные спецификацией ИНТЕРФЕЙСА командной строки ECMA 335.

MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Методы расширения

Имя Описание
GetEditAndContinueLogEntries(MetadataReader)

Перечисляет записи журнала EnC.

GetEditAndContinueMapEntries(MetadataReader)

Перечисляет записи карты EnC.

GetHeapMetadataOffset(MetadataReader, HeapIndex)

Возвращает смещение от начала метаданных к указанной куче.

GetHeapOffset(MetadataReader, Handle)

Возвращает смещение данных кучи метаданных, которые соответствуют указанному handle в контексте reader.

GetHeapSize(MetadataReader, HeapIndex)

Возвращает размер указанной кучы.

GetNextHandle(MetadataReader, BlobHandle)

Возвращает дескриптор, который следует заданному в Blob куче или nil дескрипторBlob, если он последний.

GetNextHandle(MetadataReader, StringHandle)

Возвращает дескриптор строки, которая следует заданной в строковой куче, или nil-дескриптор, если он последний.

GetNextHandle(MetadataReader, UserStringHandle)

Возвращает дескриптор UserString, который следует заданному в куче UserString или nil-дескриптор, если это последний.

GetRowNumber(MetadataReader, EntityHandle)

Возвращает номер строки записи таблицы метаданных, которая соответствует заданному handle в контексте reader.

GetTableMetadataOffset(MetadataReader, TableIndex)

Возвращает смещение от начала метаданных к указанной таблице.

GetTableRowCount(MetadataReader, TableIndex)

Возвращает количество строк в указанной таблице.

GetTableRowSize(MetadataReader, TableIndex)

Возвращает размер строки в указанной таблице.

GetToken(MetadataReader, EntityHandle)

Возвращает маркер метаданных указанного handle в контексте reader.

GetToken(MetadataReader, Handle)

Возвращает маркер метаданных указанного handle в контексте reader.

GetTypesWithEvents(MetadataReader)

Перечисление типов, определяющих одно или несколько событий.

GetTypesWithProperties(MetadataReader)

Перечисление типов, определяющих одно или несколько свойств.

ResolveSignatureTypeKind(MetadataReader, EntityHandle, Byte)

Учитывая дескриптор типа и тип необработанного типа, найденный в большом двоичном объекте сигнатуры, определяет, является ли целевой тип типом значения или ссылочным типом.

Применяется к