HOW TO:建立簽署的 Friend 組件
更新:2007 年 11 月
在這個範例中,會示範如何將 Friend 組件與擁有強式名稱的組件搭配使用。這兩個組件都必須有強式名稱。雖然在這個範例中這兩個組件都使用相同金鑰,但它們也可以使用不同金鑰。
若要在 Visual Studio 中建立已簽署的組件和 Friend 組件
開啟 Visual Studio 命令提示字元。
搭配強式名稱工具使用下列命令序列,產生 keyfile (金鑰檔) 並顯示其公開金鑰。如需詳細資訊,請參閱強式名稱工具 (Sn.exe)。
在這個範例中,產生強式名稱金鑰並將它儲存在 FriendAssemblies.snk 檔中:
sn -k FriendAssemblies.snk
從 FriendAssemblies.snk 擷取公開金鑰並將它放入 FriendAssemblies.publickey:
sn -p FriendAssemblies.snk FriendAssemblies.publickey
顯示儲存在 FriendAssemblies.publickey 檔中的公開金鑰:
sn -tp FriendAssemblies.publickey
建立名為 FriendAssembliesSnA.vb 並且包含下列程式碼的 Visual Basic 新檔案。此程式碼會使用 InternalsVisibleToAttribute 屬性,將 FriendAssembliesSnB 宣告為 Friend 組件。
強式名稱工具每次執行時都會產生新的公開金鑰。因此,您必須將下列程式碼中的公開金鑰取代為剛產生的公開金鑰,如下列範例所示。
' FriendAssembliesSnA.vb. ' Compile with: ' Vbc.exe /target:library /keyfile:FriendAssemblies.snk FriendAssembliesSnA.vb Imports System.Runtime.CompilerServices ' Replace the value of PublicKey with your public key. <Assembly: InternalsVisibleTo("FriendAssembliesSnB, PublicKey=" & _ "002400000480000094000000060200000024000052534131000400000100010065364c" & _ "640a04ab7c4f06313779601ffb5d1284b381393ad2ede92b4bf91384bbfdb0f9b7ecf6" & _ "a387b7f9348fc59366987429db41ee061c1a808eb408c4ebd9aebd0d4b19b721121a0d" & _ "c66949f12878c4e2add5489f6208f49e67ddee4d0bb72fa6860a775b7e2232209efe8b" & _ "4566ea8bd9319a4b8feb3ef4911e7a7d2e957a92")> ' Friend class. Friend Class FriendAssembliesSnA Public Sub Test() MsgBox("Friend Assemblies Sample") End Sub End Class
編譯並簽署 FriendAssembliesSnA.vb:
Vbc.exe /target:library /keyfile:FriendAssemblies.snk FriendAssembliesSnA.vb
建立名為 FriendAssembliesSnB.vb 並且包含下列程式碼的 Visual Basic 新檔案。因為 FriendAssembliesSnA 已將 FriendAssembliesSnB 指定為 Friend 組件,所以 FriendAssembliesSnB 中的程式碼可以存取 FriendAssembliesSnA 中的 Friend 型別和成員。
' FriendAssembliesSnB.vb. ' Compile with: ' Vbc.exe /keyfile:FriendAssemblies.snk /r:FriendAssembliesSnA.dll FriendAssembliesSnB.vb Module FriendAssembliesSnB Public Sub Main() ' Access a Friend class. Dim friendTest As New FriendAssembliesSnA friendTest.Test() End Sub End Module
編譯並簽署 FriendAssembliesSnB.vb:
Vbc.exe /keyfile:FriendAssemblies.snk /r:FriendAssembliesSnA.dll FriendAssembliesSnB.vb
編譯器產生的組件名稱必須符合傳遞至 InternalsVisibleToAttribute 屬性的 Friend 組件名稱。您可以使用 /out 編譯器選項明確設定此組件。如需詳細資訊,請參閱/out (Visual Basic)。
執行 FriendAssembliesSnB.exe。
程式會顯示包含 "Friend Assemblies Sample" 字串的訊息方塊。
安全性
InternalsVisibleToAttribute 屬性和 StrongNameIdentityPermission 類別之間有相似處。主要差異是 StrongNameIdentityPermission 可以要求安全性權限來執行特定程式碼區段,而 InternalsVisibleToAttribute 屬性則會控制 Friend 型別和成員的可視性。