Вступ до Асамблеї Ююань Ми знаємо, що члени класу, визначені як всередині (включаючи типи, методи, властивості, змінні, події), можуть бути доступні лише в тій самій асемблері (звісно, я маю на увазі звичайний спосіб, не враховуючи доступ через відображення). Це правило в . .NET 2.0 трохи зламаний, що дозволяє нам налаштовувати доступ до внутрішніх членів асамблеї для конкретних членів. Ми називаємо асемблею, що містить ці внутрішні елементи, вихідною асемблею, а набір асемблю називається друзівською асамблеєю.
Використання у друзі Цей атрибут використовується на рівні асамблеї.
Таким чином, після того, як програма FriendAssembly посилається на асемблер, вона зможе отримати доступ до внутрішньої властивості Name. Загалом, ця збірка: InternalsVisibleTo("FriendAssembly") краще розміщується в AssemblyInfo.cs, адже вона знаходиться на рівні асемблеру.
Коли використовувати InternalsToVisibleTo Насправді цей атрибут не використовується у загальних застосуваннях, і ми не повинні ним зловживати. Адже загалом добре спроектована збірка не обов'язково має бути відкритою для зовнішнього світу. Але сценарії модульного тестування можуть скористатися цією функцією. Завдяки цій функції ми можемо вказати, що код для модульних тестів має доступ до цих внутрішніх елементів, щоб ми могли їх тестувати. Однак для цього потрібно написати ім'я друга асамблеї мертвою у вихідній асемблері, що спричиняє певні проблеми з безпекою. Безпеку можна гарантувати, впроваджуючи підписні збірки.
InternalsToVisibleTo та збірка підпису Ви можете безпосередньо вказати ім'я та публічний ключ асемблера друга мета для InternalsVisibleTo. Використовуйте командний рядок розробника VS для генерації публічного ключа для FriendAssembly:
Вкажіть ім'я асемблею друга та відкритий ключ до вихідної асемблеру:
Насправді, оскільки друга асамблея посилається на вихідну асамблею, а підписана асамблея посилається на непідписану асамблею, і підписана асамблея не може вказати непідписану асамблею друга, будь-яка з них підписана, тоді їх потрібно підписати.
|