2010-10-27 2 views
2

Что делает ILMerge?Действительно ли ILMerge объединяет сборки или просто помещает все в один файл?

Создает ли он новую сборку или просто помещает несколько сборок в одну DLL?

Я прошу с точки зрения:

  • Что происходит, когда я сливаясь сборки, которые имеют InternalsVisibleTo атрибуты друг к другу?
  • Что произойдет, если я делаю отражение от строк из полных имен сборки

Благодаря

ответ

7

Я не уверен, что различие вы пытаетесь провести между слиянием собраний и положить все в одном файл. Что он делает, хотя и принимает набор .Net-сборок и создает единую сборку, которая содержит объединенное содержимое всех сборок.

Это не влияет на атрибут InternalsVisibleTo для объединений сборок. Этот атрибут используется средой выполнения, чтобы разрешить доступ к internal между сборками (что является незаконным). Поскольку все они теперь находятся в одной сборке, хотя они могут свободно обращаться к типам internal друг друга без использования InternalsVisibleTo. Короче говоря, если до слияния был действительный доступ internal, он будет действителен после слияния.

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

  1. Схват типов в сборе квалифицированного имени во время выполнения. Это все равно будет работать нормально, но вы получите имя объединенной сборки вместо исходного имени сборки.
  2. Жесткое кодирование содержит квалифицированные имена типов в проект. Это вызовет проблемы, если вы используете имя сборки до слияния, поскольку этот тип больше не существует.