Разница между манифестом приложения и манифестом сборки - PullRequest
2 голосов
/ 13 августа 2010

В чем разница между манифестом приложения и манифестом сборки?Где каждый из них используется?Какой из двух находится в ресурсах .dll или .exe?(или оба могут быть там?).

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

Описание манифеста приложения
Описание манифеста сборки

РЕДАКТИРОВАТЬ: и нет, я не хочу использовать какие-либо вызовы API.Я пишу все это сам.

Ответы [ 3 ]

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

Короче говоря, это два совершенно разных понятия с, к сожалению, похожими именами.

Манифест приложения - это файл XML, встроенный или распространяемый вместе с двоичным файлом PE (управляемым или собственным), который дает загрузчику ОС инструкции о таких вещах, как зависимости сборки SxS, требуемое повышение прав, Совместимость с версией ОС и т. Д.

Манифест сборки - это раздел в сборке CLI, в котором указаны зависимости управляемой сборки, файлы, из которых она состоит, открытый ключ сборки, экспорт типов, флаги CLR и т. Д. Вы можете проверить манифест сборки, используя ILDASM.exe или большинство декомпиляторов .NET.

Соответствующая выдержка из ECMA 335 (спецификация CLI), раздел I.9.6:

Манифесты: каждая сборка имеет манифест, который объявляет, какие файлы составляют сборку, какие типы экспортируются, а какие другие сборки необходимы для разрешения ссылок на типы внутри сборка. Так же, как компоненты CLI самоописывают себя через метаданные в компонент CLI, так что сборки самоописывают через свои проявляется. Когда один файл составляет сборку, он содержит метаданные, описывающие типы, определенные в сборке, и метаданные, описывающие саму сборку. Когда сборка содержит более одного файла с метаданными, каждый из файлов описывает типы, определенные в файле, если таковые имеются, и один из этих файлов также содержит метаданные, описывающие сборку (включая имена другие файлы, их криптографические хеши и типы, которые они экспортируют снаружи сборки).

Обратите внимание, что:

  • все управляемые сборки должны иметь манифесты сборки, исполняемые файлы и библиотеки;
  • все собственные двоичные файлы, исполняемые файлы и библиотеки, может иметь манифесты приложения.
0 голосов
/ 23 января 2011

Манифесты приложений, как правило, встраиваются в EXE-файлы и, как ни странно, в Dlls, и указывают, от каких сборок зависит EXE-файл или DLL.

Манифесты сборки могут быть встроены в библиотеки DLL или находиться на диске в виде отдельного файла и давать идентификаторы сборки и список ресурсов: библиотеки DLL, com-объекты без активации и классы окон.

Если имя сборки является именем dll, то этот же манифест в конечном итоге используется как манифест приложения для определения зависимостей dll, так и манифест сборки, чтобы увидеть, что экспортирует сборка. Эта опция на самом деле кажется просто сумасшедшей для нативных сборок, обычно лучше создать сборку со сложным именем в духе company.product.module, а затем в качестве единственной записи просто использовать файл module.dll.

0 голосов
/ 19 августа 2010

Похоже, мне придется следовать обоим:

В качестве ресурса в DLL, сборка доступна для частного использования DLL.Манифест сборки не может быть включен в качестве ресурса в EXE-файл.Файл EXE может содержать манифест приложения в качестве ресурса.

(найденная информация здесь ).Похоже, что исполняемые файлы имеют манифесты приложений , встроенные в ресурсы, а библиотеки (DLL) имеют манифесты сборки .Поскольку оба они являются PE (переносимыми исполняемыми файлами), мне потребуется проанализировать оба типа.

...