方法: 署名されたフレンド アセンブリを作成する
更新 : 2007 年 11 月
次の例は、厳密な名前を持つアセンブリと共にフレンド アセンブリを使用する方法を示しています。両方のアセンブリに厳密な名前が付けられている必要があります。この例のアセンブリは両方とも同じキーを使用していますが、別々のキーを使用することもできます。
Visual Studio で署名付きアセンブリとフレンド アセンブリを作成するには
Visual Studio コマンド プロンプトを開きます。
厳密名ツールで次のコマンド シーケンスを使用して、キー ファイルを生成し、パブリック キーを表示します。詳細については、「厳密名ツール (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 をフレンド アセンブリとして宣言します。
厳密名ツールは、実行するごとに新しいパブリック キーを生成します。したがって、次のコード内のパブリック キーを、ここで生成されたパブリック キーに置き換える必要があります。次の例を参照してください。
' 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 をフレンド アセンブリとして指定しているため、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 属性に渡されるフレンド アセンブリ名と一致している必要があります。/out コンパイラ オプションを使用すると、アセンブリを明示的に設定できます。詳細については、「/out (Visual Basic)」を参照してください。
FriendAssembliesSnB.exe を実行します。
文字列 "Friend Assemblies Sample" が含まれるメッセージ ボックスが表示されます。
セキュリティ
InternalsVisibleToAttribute 属性と StrongNameIdentityPermission クラスには、いくつかの類似点があります。主な違いは、StrongNameIdentityPermission は特定のコード セクションを実行するのにセキュリティ アクセス許可を要求し、InternalsVisibleToAttribute 属性は Friend 型とそのメンバの参照可能範囲を制御するという点です。