次の方法で共有


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

更新 : 2007 年 11 月

フレンド アセンブリは、別のアセンブリの Friend 型とメンバへのアクセスが許可されるアセンブリです。詳細については、「Friend (Visual Basic)」を参照してください。アセンブリをフレンド アセンブリとして指定すると、他のアセンブリがアクセスできるように型とメンバをパブリックとしてマークする必要がなくなります。これは、次のようなシナリオの場合、特に便利です。

  • 単体テスト時に、テスト コードが別のアセンブリで実行されているときに、Friend とマークされているテスト対象のアセンブリ内のメンバにアクセスする必要がある。

  • クラス ライブラリの開発時に、そのライブラリへの追加内容が別のアセンブリに含まれているが、Friend とマークされている既存のアセンブリ内のメンバへのアクセスが必要である。

解説

InternalsVisibleToAttribute 属性を使用して、特定のアセンブリに対する 1 つ以上のフレンド アセンブリを識別できます。たとえば、InternalsVisibleToAttribute 属性をアセンブリ A に含め、アセンブリ B をフレンド アセンブリとして指定した場合、アセンブリ B は、アセンブリ A の Friend とマークされているすべての型とメンバにアクセスできます。これを次の例に示します。

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

フレンドとして明示的に指定されているアセンブリだけが、Friend 型とメンバにアクセスできます。たとえば、アセンブリ B がアセンブリ A のフレンド アセンブリであり、アセンブリ C がアセンブリ B を参照した場合、C は A の Friend 型にはアクセスできません。

コンパイラは、InternalsVisibleToAttribute 属性に渡されるフレンド アセンブリの名前に対して基本的な検証を行います。アセンブリ A がアセンブリ B をフレンド アセンブリとして宣言する場合、検証規則は次のようになります。

  • アセンブリ A に厳密な名前が付けられている場合、アセンブリ B にも厳密な名前が付けられている必要があります。属性に渡されるフレンド アセンブリ名は、アセンブリ名と、アセンブリ B に署名するために使用される厳密名キーの公開キーで構成する必要があります。

    InternalsVisibleToAttribute 属性に渡されるフレンド アセンブリ名は、アセンブリ B の厳密な名前にすることはできません。アセンブリ バージョン、カルチャ、アーキテクチャ、または公開キー トークンを含めないでください。

  • アセンブリ A に厳密な名前が付けられていない場合、フレンド アセンブリ名はアセンブリ名だけで構成します。詳細については、「方法 : 署名のないフレンド アセンブリを作成する」を参照してください。

  • アセンブリ B に厳密な名前が付けられている場合、プロジェクト設定によって、またはコマンド ラインで /keyfile コンパイラ オプションを使用して、アセンブリ B の厳密名キーを指定する必要があります。詳細については、「方法: 署名されたフレンド アセンブリを作成する」を参照してください。

モジュール ファイル (拡張子が .netmodule のファイル) からアセンブリの Friend 型とメソッドにアクセスする方法の詳細については、「/moduleassemblyname」を参照してください。

Bb384772.alert_security(ja-jp,VS.90).gifセキュリティに関するメモ :

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

参照

処理手順

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

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

概念

アセンブリ

参照

InternalsVisibleToAttribute

アセンブリ リンカ (Al.exe)

/addmodule

その他の技術情報

Visual Basic コンパイラ