友元程序集 (Visual Basic)
更新:2007 年 11 月
“友元程序集”是一种允许访问其他程序集的 Friend 类型和成员的程序集。(有关更多信息,请参见Friend (Visual Basic)。) 如果将程序集指定为友元程序集,则不再需要将类型和成员标记为公共,以使其他程序集可以访问它们。在以下情况下,使用友元程序集尤其方便:
在单元测试中,测试代码在另一个程序集中运行,但需要访问正在测试的标记为 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 不能访问 A 中的 Friend 类型。
编译器对传递给 InternalsVisibleToAttribute 属性的友元程序集名称执行一些基本验证。如果程序集 A 将 B 声明为友元程序集,则验证规则如下:
如果程序集 A 具有强名称,则程序集 B 也必须具有强名称。传递给属性的友元程序集名称必须包括程序集名称,以及用于签发程序集 B 的强名称密钥的公钥。
传递给 InternalsVisibleToAttribute 属性的友元程序集名称不能是程序集 B 的强名称:不包含程序集版本、区域性、结构或公钥标记。
如果程序集 A 不具有强名称,则友元程序集名称应仅包含该程序集名称。有关更多信息,请参见如何:创建未签名的友元程序集。
如果程序集 B 具有强名称,则必须使用项目设置或命令行 /keyfile 编译器选项,为程序集 B 指定强名称密钥。有关更多信息,请参见如何:创建签名的友元程序集。
有关如何从模块文件(具有 .netmodule 扩展名的文件)访问程序集的 Friend 类型和方法的信息,请参见 /moduleassemblyname。
![]() |
---|
InternalsVisibleToAttribute 属性和 StrongNameIdentityPermission 类之间存在相似性。主要差异在于:StrongNameIdentityPermission 可以要求具有安全权限才能运行特定的一段代码,而 InternalsVisibleToAttribute 属性则控制 Friend 类型和成员的可见性。 |