方法: 署名されたフレンド アセンブリを作成する

更新 : 2007 年 11 月

次の例は、厳密な名前を持つアセンブリと共にフレンド アセンブリを使用する方法を示しています。両方のアセンブリに厳密な名前が付けられている必要があります。この例のアセンブリは両方とも同じキーを使用していますが、別々のキーを使用することもできます。

Visual Studio で署名付きアセンブリとフレンド アセンブリを作成するには

  1. Visual Studio コマンド プロンプトを開きます。

  2. 厳密名ツールで次のコマンド シーケンスを使用して、キー ファイルを生成し、パブリック キーを表示します。詳細については、「厳密名ツール (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 をフレンド アセンブリとして宣言します。

    厳密名ツールは、実行するごとに新しいパブリック キーを生成します。したがって、次のコード内のパブリック キーを、ここで生成されたパブリック キーに置き換える必要があります。次の例を参照してください。

    ' 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 をフレンド アセンブリとして指定しているため、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 属性に渡されるフレンド アセンブリ名と一致している必要があります。/out コンパイラ オプションを使用すると、アセンブリを明示的に設定できます。詳細については、「/out (Visual Basic)」を参照してください。

  7. FriendAssembliesSnB.exe を実行します。

    文字列 "Friend Assemblies Sample" が含まれるメッセージ ボックスが表示されます。

セキュリティ

InternalsVisibleToAttribute 属性と StrongNameIdentityPermission クラスには、いくつかの類似点があります。主な違いは、StrongNameIdentityPermission は特定のコード セクションを実行するのにセキュリティ アクセス許可を要求し、InternalsVisibleToAttribute 属性は Friend 型とそのメンバの参照可能範囲を制御するという点です。

参照

処理手順

方法 : 署名のないフレンド アセンブリを作成する

概念

フレンド アセンブリ (Visual Basic)

参照

InternalsVisibleToAttribute

/keyfile

厳密名ツール (Sn.exe)

その他の技術情報

厳密な名前付きアセンブリの作成と使用