Объединение сборок и использование внутреннего ключевого слова

#.net #reflection #ilmerge

#.net #отражение #ilmerge

Вопрос:

Изменяет ли объединение сборок область действия внутреннего ключевого слова?

Я совершенно уверен, что это не имело бы эффекта (или, по крайней мере, того, который имел бы значение), поскольку любой, кто ссылается на окончательную сборку, в любом случае не сможет получить доступ к внутренним классам.

Возможно, это гипотетический вопрос, не имеющий реального значения, но, тем не менее, мне было любопытно.

Редактировать: я имею в виду с ILMerge, а не объединение исходного кода в единую сборку, которую можно собрать.

Комментарии:

1. Что вы подразумеваете под объединением сборок? Вы имеете в виду с помощью (ILMerge]( microsoft.com/downloads/en /… )? Технически вы не можете. Вы можете объединить модули сборки в единый управляемый образ PE32. Или, возможно, вы имеете в виду на уровне исходного кода?

2. @sehe обновленный вопрос. Я имею в виду ILMerge, а не исходный код.

Ответ №1:

Да, как только сборки объединены, они получают доступ к внутренним классам друг друга. Некоторые обфускаторы специально используют это для преобразования общедоступных вызовов между сборками во внутренние вызовы, а затем запутывают их, делая это более безопасным. Ссылка: SmartAssembly

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

Ответ №2:

Предполагая, что вы не работаете с полным доверием, любые типы, которые были объединены в окончательную сборку с внутренними типами, теперь смогут получить доступ к общедоступным элементам внутренних типов.

Итак, данная сборка A:

 public class MyClassA { ... }
  

и сборка B:

 internal class MyClassB { ... }
  

У MyClassA может не быть разрешения отражать общедоступные элементы MyClassB. Если они были объединены в одну сборку, то MyClassA может получить такое разрешение.

Ответ №3:

Другой возможный ресурс для получения дополнительной информации — это страница ILMerge в Microsoft Research, где они предлагают альтернативу ILMerge