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