Разница между метаданными и манифестом - PullRequest
11 голосов
/ 23 февраля 2012

Я изучаю .NET Framework и перечитываю Метаданные и Манифест .

"Метаданные - это данные о данных, а Манифест - это данные о сборке !!"

В: Так не является ли Манифест метаданными?

Тогда в чем его отличие?

Ответы [ 5 ]

14 голосов
/ 23 февраля 2012

Манифест содержит информацию о сборках, такую ​​как версия, локаль имени и необязательное строгое имя, однозначно идентифицирующее сборку.Эта информация о манифесте используется CLR.Манифест также содержит требования безопасности для проверки этой сборки.Он также содержит имена и хэши всех файлов, из которых состоит сборка.Манифест сборки .NET содержит криптографический хэш различных модулей в сборке.И когда сборка загружена, CLR пересчитывает хэш имеющихся модулей и сравнивает его со встроенным хешем.Если хеш, сгенерированный во время выполнения, отличается от того, который был найден в манифесте, .NET отказывается загружать сборку и выдает исключение.

Метаданные означают данные о данных.Метаданные выдают типы, доступные в этой сборке, а именно.классы, интерфейсы, перечисления, структуры и т. д. и содержащие их пространства имен, имя каждого типа, его видимость / область действия, его базовый класс, реализованные интерфейсы, его методы и их область действия, а также параметры каждого метода, свойства типа,и так далее.Метаданные сборки генерируются компиляторами высокого уровня автоматически из исходных файлов.Компилятор встраивает метаданные в целевой выходной файл, dll, .exe или .netmodule в случае многомодульной сборки.

6 голосов
/ 08 сентября 2016

Вот самый простой ответ.

Сборка: один или несколько файлов, входящих в вашу программу. Обычно Exe или dll или комбинация этих и некоторых других наборов файлов

метаданные: содержит оба 1) Метаданные сборки 2) Метаданные типа.

1) Метаданные сборки также известны как MANIFEST, они содержат имя сборки, версии, культуру, информацию о строгом имени, информацию о ссылочной сборке ... и т. Д.

2) Тип метаданных - это экспортируемые типы данных и методы сборки.

enter image description here

3 голосов
/ 17 ноября 2013

Манифест: в нем хранится информация (например, имя сборок, версия и т. Д.) О сборках, которая требуется CLR для загрузки сборок.

Метаданные: в нем хранится подробная информация о сборках, такая как имя метода,члены и т. д.

Оба файла автоматически генерируются компилятором при преобразовании кода в MSIL.

1 голос
/ 23 февраля 2012

Из «Программирование .NET-компонентов, второе издание» Ювала Лоуи, опубликовано О'Рейли Первый абзац:

Метаданные:

Метаданные - это полный способ описания содержимого сборки .NET. Копаясь в метаданных, вы получаете типы, доступные в этой сборке, а именно классы, интерфейсы, перечисления, структуры и т. д. и их содержание пространства имен, имя каждого типа, его видимость / область действия, его база класс, интерфейсы, которые он реализовал, его методы и их область применения, и параметры каждого метода, свойства типа и т. д. Ассамблея метада генерируется компиляторами высокого уровня автоматически из исходные файлы. Компилятор встраивает метаданные в целевой вывод файл, dll, .exe или .netmodule в случае многомодульного сборка. В случае многомодульной сборки когда-либо модуль, который содержит IL должен иметь метаданные, встроенные в него, чтобы описать типы в этом модуле. Требуется каждый компилятор, предназначенный для .NET CLR генерировать и вставлять метаданные в выходной файл, и это метаданные должны быть в стандартном формате. .NET Reflection экстенсивно использует информацию метаданных, чтобы узнать информацию о типе динамически.

Метаданные - это дополнительная информация в управляемой сборке, описывающая такие вещи, как типы, имена типов, имена методов и т. Д. (В основном, информация, которую можно получить из служб Reflection). Подробнее см. http://msdn2.microsoft.com/en-us/library/ms404430.aspx.

Манифест сборки:

Метаданные описывают содержимое сборки, тогда как манифест описывает саму сборку, предоставляя общие логические атрибуты всеми модулями и всеми компонентами сборки. Манифест содержит имя сборки, номер версии, локаль и необязательный строгое имя, однозначно идентифицирующее сборку. Этот манифест информация используется CLR. Манифест также содержит требования безопасности для проверки этой сборки. Он также содержит имена и хэши всех файлов, которые составляют сборку. Сеть сборочный манифест содержит криптографический хеш различных модулей в сборе. И когда сборка загружена, CLR пересчитывает хеш модулей под рукой, и сравнивает его с встраиваемым хэш. Если хеш, сгенерированный во время выполнения, отличается от найденного в манифест, .NET отказывается загружать сборку и выдает исключение. Это отличается от COM, под COM можно Поменяйте местами оригинальный файл DLL или EXE-файл с тем же типом Библиотеки / интерфейсы и нанести ущерб системе, запустив вредоносный код. Манифест также генерируется автоматически компилятор высокого уровня из исходных файлов всех модулей в сборка. Манифест встраивается только в один физический файл и только один раз поскольку он является общим для всех модулей в сборке, тогда как Метаданные должны быть встроены во все модули. .NET CLR-совместимый компиляторы должны генерировать манифест, и он должен быть в стандарте формат. Использование манифеста .NET собирает информацию о других ссылочные сборки. Это обеспечивает совместимость версий, а сборка получает взаимодействовать с точным набором доверенных других сборки это ожидает. Манифест содержит каждую ссылочную сборку имя, его открытый ключ (если есть строгое имя), его версия номер и локаль. При запуске этой сборки .NET гарантирует, что используются только эти конкретные сборки, которые совместимы только версии загружены.

«Манифест» - довольно перегруженный термин. В .NET «манифест сборки» - это некоторые метаданные в сборке, описывающие работу с версиями. Подробнее см. Здесь http://msdn2.microsoft.com/en-us/library/1w45z383.aspx.

Подробнее о манифесте сборки вы можете прочитать здесь

Метаданные об общей сборке и модулях называются манифестом

0 голосов
/ 24 февраля 2012

Метаданные описывают содержимое сборки, тогда как манифест описывает саму сборку, предоставляя логические атрибуты, общие для всех модулей и всех компонентов в сборке. Манифест содержит имя сборки, номер версии, языковой стандарт и необязательное строгое имя, однозначно идентифицирующее сборку.

...