如何:创建未签名的友元程序集
更新:2007 年 11 月
本示例演示如何将友元程序集和未签名的程序集一起使用。
在 Visual Studio 中创建程序集和友元程序集
为 Windows 窗体应用程序创建一个新项目,将其命名为 FriendAssembliesB。
在“文件”菜单上指向“添加”,然后单击“新建项目”。
在“添加新项目”对话框中,单击“类库”,将项目命名为“FriendAssembliesA”。
用下面的代码替换 FriendAssembliesA 项目中的 Class1.vb 的内容。这段代码使用 InternalsVisibleToAttribute 属性将 FriendAssembliesB 声明为友元程序集。
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
在“解决方案资源管理器”中右击 FriendAssembliesB 项目,然后单击“添加引用”。
在“添加引用”对话框中单击“项目”选项卡。单击“FriendAssembliesA”,然后单击“确定”。
右击 FriendAssembliesB 项目中的 Form1.vb,然后单击“查看代码”。
将下面的代码添加到 Form1 类中。
因为 FriendAssembliesA 将 FriendAssembliesB 指定为友元程序集,所以 FriendAssembliesB 中的代码可以访问 FriendAssembliesA 中的 Friend 类型和成员。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load ' Access a Friend class. Dim friendTest1 As New FriendAssembliesA friendTest1.Test() Dim friendTest2 As New FriendAssembliesClassA ' Access a Friend method. friendTest2.Test() End Sub
按 F5 编译并运行项目。
该程序将显示一个消息框,其中包含字符串“Friend Assemblies Sample Class”和“Friend Assemblies Sample Method”。
安全性
InternalsVisibleToAttribute 属性和 StrongNameIdentityPermission 类之间存在相似性。主要差异在于:StrongNameIdentityPermission 可以要求具有安全权限才能运行特定的一段代码,而 InternalsVisibleToAttribute 属性则控制 Friend 类型和成员的可见性。