Слияние сборок и использование внутреннего ключевого слова - PullRequest
7 голосов
/ 25 мая 2011

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

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

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

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

Ответы [ 3 ]

10 голосов
/ 25 мая 2011

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

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

3 голосов
/ 25 мая 2011

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

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

public class MyClassA { ... }

и сборка B:

internal class MyClassB { ... }

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

1 голос
/ 25 мая 2011

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

...