Подтвердить что ты не робот

Что такое метаданные в .NET?

Я искал несколько сайтов, чтобы понять, что metadata в .NET, и это значит.

Я все еще новичок в программировании настольных приложений на С# WPF. Когда я был веб-программированием, в HTML-коде есть метатег, где мы описываем сайт с названиями, ключевыми словами и т.д. Является ли аналогичным в приложении .NET? Я читал wiki и googled, но все, что я получаю, является концептуальным объяснением.

Один описывает "metadata is data that describes the state of the assembly and a detailed description of each type, attribute within the assembly". Являются ли метаданные просто концепцией или чем-то физическим, как строка кодов, которые я набирал где-то, чтобы описать мой код? Если да, то моя оценка будет моей метаданной?

Я прочитал метаданные "Within the Common Language Runtime (CLR)", но я код только на С#, как я могу кодировать в CLR в метаданные? Являются ли метаданные оценкой в ​​CLR? Как я могу его изменить.

MSDN написал, что метаданные представляют собой двоичную информацию для программного компонента другого языка, чтобы понять его. Я понимаю, что только человеческое описание потребностей (помилуй) на английском языке, чтобы понять, что делает блок кода. Компонент программного обеспечения просто выполняет любую инструкцию, которую мы написали, - что является необходимостью "двоичной" информации. Как компилятор может понять смысл моего кода высокого уровня для генерации "Описание сборки" ? Если я напишу программу, которая конвертирует валюту, будут ли метаданные автоматически генерироваться, зная, что программа конвертирует валюту? Где этот интеллект?

Я полностью смущен.

4b9b3361

Ответ 1

Поскольку другие уже предоставили большие объяснительные ответы, я просто расскажу, как вы можете сами просматривать метаданные.

В вашем каталоге Microsoft SDK (скорее всего, варианты C:\Program Files\Microsoft SDK\Windows\v7.0A\Bin\NETFX 4.0 Tools) есть программа под названием ildasm.exe - это простой дизассемблер, который позволяет просматривать скомпилированные .NET.

Вы можете создать очень простое консольное приложение и использовать ildasm.exe для просмотра скомпилированного содержимого. Посмотреть /MetaInfo/Show! команда (или просто Ctrl + M) отобразит метаданные - вы можете проверить, как они выглядят. Часть метаданных от печати приложений Hello до консоли:

TypeDef #1 (02000002)
-------------------------------------------------------
TypDefName: Program  (02000002)
Flags     : [Public] [AutoLayout] [Class] [AnsiClass] [BeforeFieldInit](00100001)
Extends   : 01000001 [TypeRef] System.Object
Method #1 (06000001) [ENTRYPOINT]
-------------------------------------------------------
    MethodName: Main (06000001)
    Flags     : [Public] [Static] [HideBySig] [ReuseSlot]  (00000096)
    RVA       : 0x00002050
    ImplFlags : [IL] [Managed]  (00000000)
    CallCnvntn: [DEFAULT]
    ReturnType: Void
    1 Arguments
        Argument #1:  SZArray String
    1 Parameters
        (1) ParamToken : (08000001) Name : args flags: [none] (00000000)

Здесь вы можете увидеть определение типа (Program) и один из его методов (Main), который принимает один входной аргумент и возвращает void. Это, естественно, только часть метаданных, даже для самых простых программ там намного больше.

Ответ 2

Если вы знакомы с .NET Reflection, вы можете думать о метаданных как "данные, которые обращается к обращению". Каждая сборка .NET хранит информацию о том, какие типы и методы она содержит, атрибуты этих методов и т.д. Им не нужно будет хранить это только для запуска кода (у родных EXE нет такой информации), но это нуждается в ней для других целей, например, для обеспечения декларативной безопасности и включения Reflection.

Таким образом, метаданные являются "чем-то физическим", но большинство из них автоматически генерируется из кода, который вы пишете. Добавление атрибутов к вашим классам или методам, вероятно, является единственным способом прямого изменения метаданных. В частности, ваши комментарии к исходному коду не будут храниться в сборке в виде метаданных (или любым другим способом).

Страница Википедии на этом очень хорошо: http://en.wikipedia.org/wiki/.NET_metadata

Изменить: Нет, метаданные не похожи на комментарии. Это просто "данные о коде", который не является частью самого кода (не требуется для запуска программы). Это не похоже на метаданные HTML вообще. Примером метаданных является тот факт, что сборка содержит класс с именем "MyClass", и этот класс содержит метод с именем "DoSomething" с определенными параметрами и т.д. Таким образом, это не таинственный - просто "очевидный" материал в основном.

Ответ 3

Эта представляет собой обширную и всестороннюю статью о метаданных в dot net. Взгляните на это. Надеюсь, это многое прояснит. Он ссылается на страницу, объясняющую , как метаданные используются во время выполнения.

Отражение в dot net - очень мощная концепция, и она основана на чтении метаданных, хранящихся вдоль с фактическим кодом.

Ответ 4

Просто метаданные - это информация, которая хранится в вашей программе, которую вы можете проверить несколькими способами, в .NET. Один из этих методов обычно называется Reflection

Метаданные описывают типы (например, классы, интерфейсы,...), методы и параметры (имена и типы) и атрибуты, которые были применены. Вы можете использовать эту информацию несколькими способами, например. тестовые системы, такие как nunit и msstest (среди других), используют метаданные для "обнаружения" тестов в сборке; другие способы использования метаданных в привязке данных.

Существует так много способов его использования - у них даже есть книги (разделы по меньшей мере http://my.safaribooksonline.com/book/programming/csharp/9781449379629/reflection-and-metadata/729)

Ответ 5

не затрудняет его просто --- Данные (информация) о Данных.

просто подумайте о метатеге в HTML, он содержит информацию о странице, ключевом слове, авторе, последнем измененном. это означает, что он содержит информацию о данных, которые являются вашей html-страницей.

Когда мы говорим в терминах С#, Метаданные хранятся в одном разделе переносимого исполняемого файла (PE).NET Framework, а промежуточный язык Microsoft (MSIL) хранится в другом разделе PE файла. Часть метаданных файла содержит серию структур данных таблицы и кучи. Часть MSIL содержит токены MSIL и метаданных, которые ссылаются на часть метаданных PE файла. Каждая таблица метаданных содержит информацию об элементах вашей программы. Например, одна таблица метаданных описывает классы в вашем коде, другая таблица описывает поля и т.д. Если в вашем коде десять классов, таблица классов будет иметь десятки строк, по одному для каждого класса. Таблицы метаданных ссылаются на другие таблицы и кучи. Например, таблица метаданных для классов ссылается на таблицу для методов. Метаданные также хранят информацию в четырех структурах кучи: string, blob, user string и GUID. Все строки, используемые для обозначения типов и элементов, хранятся в куче строк. Например, таблица методов не сохраняет непосредственно имя конкретного метода, но указывает на имя метода, хранящееся в куче строк.

Если это вас интересует, обратитесь к https://msdn.microsoft.com/en-us/library/xcd8txaw%28v=vs.110%29.aspx