Введение в Ассамблею Ююань Мы знаем, что члены класса, определённые как внутренние (включая типы, методы, свойства, переменные, события), могут быть доступны только в одной и той же ассемблере (конечно, я говорю о обычном способе, не учитывая доступ через отражение). Это правило в . .NET 2.0 немного сломан, что позволяет нам настроить доступ к внутренним членам ассамблеи для конкретных членов. Мы называем сборку, содержащую эти внутренние элементы, исходной сборкой, а сборку — сборкой друга.
Использование сборки друзей Этот атрибут используется на уровне ассемблера.
Таким образом, после того как программа FriendAssembly ссылается на ассемблер, она сможет получить доступ к внутреннему свойству Name. В целом, эта сборка:InternalsVisibleTo("FriendAssembly") лучше размещается в AssemblyInfo.cs, ведь она находится на уровне ассембли.
Когда использовать InternalsToVisibleTo На самом деле, этот атрибут не используется в общих приложениях, и мы не должны злоупотреблять им. Потому что в целом хорошо спроектированная сборка не обязательно должна быть открыта для внешнего мира. Но сценарии модульного тестирования могут использовать эту функцию. С помощью этой функции мы можем указать, что код для модульных тестов имеет доступ к этим внутренним членам, чтобы мы могли их тестировать. Однако для этого нужно записывать имя friend assembly мертвым в исходном модуле, что вызывает некоторые проблемы с безопасностью. Безопасность может быть гарантирована введением сборок подписи.
InternalsToVisibleTo и сборка подписи Вы можете напрямую указать имя и публичный ключ мета-ассемблера friend в InternalsVisibleTo. Используйте командную строку разработчика VS для генерации публичного ключа для FriendAssembly:
Укажите имя friend assembly и открытый ключ к исходному модулю:
На самом деле, поскольку сборка friend ссылается на исходную сборку, а подписанная — на неподписанную сборку, и подписанная сборка не может указывать неподписанную друговую сборку, ни одна из них подписана, то их нужно подписать.
|