Версия 2005 языка C# ввела концепцию дружественных сборок. Эта функциональная особенность позволяет вам комбинировать сборки в смысле внутреннего доступа. То есть вы можете определять внутренние члены, но иметь к ним доступ из внешних сборок. Эта возможность полезна тогда, когда вы собираетесь разбить сборку на несколько физических файлов, но хотите, чтобы эти сборки были по-прежнему доступны друг для друга. Разработчики на Visual Basic теперь имеют эту функциональную возможность в версии 2008.
Примечание
Дружественные сборки не дают доступа к закрытым (private) членам.
Для того чтобы пометить сборку как предоставляющую свои внутренние члены другой сборке, используется атрибут internalsVisibleToAttribute. Этот атрибут применяется на уровне сборки. Вы передаете в атрибут название и маркер открытого ключа внешней сборки. После этого компилятор свяжет эти две сборки как дружественные. Сборка, в кото- 'рой содержится InternalsVisibleToAttribute, будет предоставлять свои внутренние члены другой сборке (но не наоборот). Вы можете также сделать это и при помощи опций компилятора командной строки.
Дружественные сборки (как и все на этом свете) — удовольствие не бесплатное. Если вы определяете сборку как дружественную для другой сборки, то эти две сборки становятся парой и должны существовать вместе (для того чтобы их можно было использовать). Это может вызвать путаницу и осложнить управление вашими сборками. Обычно проще воздерживаться от использования этой возможности (если только у вас нет совершенно определенной потребности в ней).