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

[このドキュメントはプレビュー版であり、後のリリースで変更されることがあります。 空白のトピックは、プレースホルダーとして挿入されています。]

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

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

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

解説

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

                        Imports System.Runtime.CompilerServices

<Assembly: InternalsVisibleTo("FriendAssembliesB")> 

' Friend class.FriendClass FriendAssembliesA
    PublicSub Test()
        MsgBox("Friend Assemblies Sample Class")
    EndSubEndClass
' Public class with a Friend method.PublicClass FriendAssembliesClassA
    FriendSub Test()
        MsgBox("Friend Assemblies Sample Method")
    EndSubEndClass

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

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

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

    The friend assembly name that is passed to the InternalsVisibleToAttribute attribute cannot be the strong name of assembly B:do not include the assembly version, culture, architecture, or public key token.

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

  • If assembly B is strong named, you must specify the strong-name key for assembly B by using the project setting or the command-line /keyfile compiler option. 詳細については、「方法 : Create Signed Friend Assemblies」を参照してください。

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

セキュリティに関するメモセキュリティに関するメモ

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

参照

処理手順

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

方法 : Create Signed Friend Assemblies

参照

InternalsVisibleToAttribute

Al.exe (Assembly Linker)

/addmodule

概念

アセンブリ

その他の技術情報

Visual Basic コンパイラ