共用方式為


HOW TO:建立簽署的 Friend 組件

更新:2007 年 11 月

在這個範例中,會示範如何將 Friend 組件與擁有強式名稱的組件搭配使用。這兩個組件都必須有強式名稱。雖然在這個範例中這兩個組件都使用相同金鑰,但它們也可以使用不同金鑰。

若要在 Visual Studio 中建立已簽署的組件和 Friend 組件

  1. 開啟 Visual Studio 命令提示字元。

  2. 搭配強式名稱工具使用下列命令序列,產生 keyfile (金鑰檔) 並顯示其公開金鑰。如需詳細資訊,請參閱強式名稱工具 (Sn.exe)

    1. 在這個範例中,產生強式名稱金鑰並將它儲存在 FriendAssemblies.snk 檔中:

      sn -k FriendAssemblies.snk

    2. 從 FriendAssemblies.snk 擷取公開金鑰並將它放入 FriendAssemblies.publickey:

      sn -p FriendAssemblies.snk FriendAssemblies.publickey

    3. 顯示儲存在 FriendAssemblies.publickey 檔中的公開金鑰:

      sn -tp FriendAssemblies.publickey

  3. 建立名為 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
    
  4. 編譯並簽署 FriendAssembliesSnA.vb:

    Vbc.exe /target:library /keyfile:FriendAssemblies.snk FriendAssembliesSnA.vb

  5. 建立名為 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
    
  6. 編譯並簽署 FriendAssembliesSnB.vb:

    Vbc.exe /keyfile:FriendAssemblies.snk /r:FriendAssembliesSnA.dll FriendAssembliesSnB.vb

    編譯器產生的組件名稱必須符合傳遞至 InternalsVisibleToAttribute 屬性的 Friend 組件名稱。您可以使用 /out 編譯器選項明確設定此組件。如需詳細資訊,請參閱/out (Visual Basic)

  7. 執行 FriendAssembliesSnB.exe。

    程式會顯示包含 "Friend Assemblies Sample" 字串的訊息方塊。

安全性

InternalsVisibleToAttribute 屬性和 StrongNameIdentityPermission 類別之間有相似處。主要差異是 StrongNameIdentityPermission 可以要求安全性權限來執行特定程式碼區段,而 InternalsVisibleToAttribute 屬性則會控制 Friend 型別和成員的可視性。

請參閱

工作

HOW TO:建立未簽署的 Friend 組件

概念

Friend 組件 (Visual Basic)

參考

InternalsVisibleToAttribute

/keyfile

強式名稱工具 (Sn.exe)

其他資源

建立和使用強式名稱的組件