Дружественные сборки (Visual Basic)
Обновлен: Ноябрь 2007
friend assembly является сборкой, для которой разрешен доступ типов и членов других Friend сборок. (Дополнительные сведения см. в разделе Friend (Visual Basic).) Если сборка определена как дружественная, больше нет необходимости помечать типы и члены как public для того, чтобы другие сборки имели к ним доступ. Это особенно удобно в следующих случаях:
Во время тестирования модулей тестируемый код выполняется в отдельной сборке, но необходим доступ к членам в тестируемой сборке, которые отмечены как Friend.
При разработке библиотеки классов и дополнений к библиотеке, содержащихся в отдельных сборках, требуется доступ к элементам в существующих сборках, которые помечены как Friend.
Примечания
Можно использовать атрибут InternalsVisibleToAttribute для идентификации одной или нескольких сборок дружественных для данной сборки. Например, если включить атрибут InternalsVisibleToAttribute в сборку A и указать сборку B как дружественную сборку, сборка B получит доступ ко всем типам и членам в сборке A, которые помечены как Friend, как показано в следующем примере.
Imports System.Runtime.CompilerServices
<Assembly: InternalsVisibleTo("FriendAssembliesB")>
' Friend class.
Friend Class FriendAssembliesA
Public Sub Test()
MsgBox("Friend Assemblies Sample Class")
End Sub
End Class
' Public class with a Friend method.
Public Class FriendAssembliesClassA
Friend Sub Test()
MsgBox("Friend Assemblies Sample Method")
End Sub
End Class
Только сборки, которые явным образом указаны как дружественные, могут получить доступ к типам и членам Friend. Например, если сборка B дружественная для сборки A и сборка C ссылается на сборку B, C не имеет доступа к типам Friend в A.
Компилятор выполняет некоторые основные проверки имени дружественной сборки, передаваемой атрибуту InternalsVisibleToAttribute. Если сборка A объявляет B как дружественную сборку, правила проверки следующие:
В случае строгого имени сборки A сборка B также должна иметь строгое имя. Имя дружественной сборки, которая передается атрибуту, должно состоять из имени сборки и открытого ключа строгого имени, который используется для подписи сборки B.
Имя дружественной сборки, которая передается атрибуту InternalsVisibleToAttribute не может быть строгим именем сборки B, за исключением версии сборки, языка и региональных параметров, архитектуры или маркера открытого ключа.
Если сборка A не имеет строгого имени, имя дружественной сборки должно состоять только из имени сборки. Дополнительные сведения см. в разделе Практическое руководство. Создание неподписанных дружественных сборок.
Если сборка B имеет строгое имя, необходимо указать ключ строгого имени для сборки B с помощью параметра проекта или параметра компилятора командной строки /keyfile. Дополнительные сведения см. в разделе Практическое руководство. Создание подписанных дружественных сборок.
Сведения о доступе к типам сборки Friend и методам из модуля файла (файл с расширением .netmodule) содержатся в разделе /moduleassemblyname.
Примечание о безопасности. |
---|
Существуют сходства между атрибутом InternalsVisibleToAttribute и классом StrongNameIdentityPermission. Главное различие состоит в том, что StrongNameIdentityPermission может потребовать разрешения безопасности для выполнения определенного раздела кода, тогда как атрибут InternalsVisibleToAttribute контролирует видимость Friend типов и членов. |
См. также
Задачи
Практическое руководство. Создание неподписанных дружественных сборок
Практическое руководство. Создание подписанных дружественных сборок