この記事では、この API のリファレンス ドキュメントに補足的な解説を提供します。
InternalsVisibleToAttribute属性は、通常、現在のアセンブリ内でのみ表示される型が、指定したアセンブリに対して表示されるように指定します。
通常、C# のinternal
スコープまたは Visual Basic のFriend
スコープを持つ型とメンバーは、定義されているアセンブリでのみ表示されます。
protected internal
スコープ (Visual Basic では Protected Friend
スコープ) を持つ型とメンバーは、独自のアセンブリ内または包含クラスから派生した型にのみ表示されます。
private protected
スコープ (Visual Basic のPrivate Protected
スコープ) を持つ型とメンバーは、包含クラスまたは現在のアセンブリ内の包含クラスから派生した型で表示されます。
InternalsVisibleToAttribute属性を使用すると、これらの型とメンバーは、指定したアセンブリ内の型 (フレンド アセンブリと呼ばれます) にも表示されます。 これは、 internal
(Visual Basic ではFriend
)、 protected internal
(Visual Basic ではProtected Friend
)、 private protected
(Visual Basic ではPrivate Protected
) メンバーにのみ適用されますが、 private
メンバーには適用されません。
注
private protected
(Visual Basic のPrivate Protected
) メンバーの場合、InternalsVisibleToAttribute属性は、メンバーの包含クラスから派生した型にのみアクセシビリティを拡張します。
属性はアセンブリ レベルで適用されます。 つまり、ソース コード ファイルの先頭に含めることができるか、Visual Studio プロジェクトの AssemblyInfo ファイルに含めることができます。 この属性を使用すると、現在のアセンブリの内部型とメンバーにアクセスできる 1 つのフレンド アセンブリを指定できます。 複数のフレンド アセンブリは、2 つの方法で定義できます。 次の例に示すように、個々のアセンブリ レベルの属性として表示できます。
[assembly:InternalsVisibleTo("Friend1a")]
[assembly:InternalsVisibleTo("Friend1b")]
<assembly:InternalsVisibleTo("Friend1a")>
<assembly:InternalsVisibleTo("Friend1b")>
また、次の例に示すように、個別の InternalsVisibleToAttribute タグと共に 1 つの assembly
キーワードを使用して表示することもできます。
[assembly:InternalsVisibleTo("Friend2a"),
InternalsVisibleTo("Friend2b")]
<Assembly:InternalsVisibleTo("Friend2a"), _
Assembly:InternalsVisibleTo("Friend2b")>
フレンド アセンブリは、 InternalsVisibleToAttribute コンストラクターによって識別されます。 現在のアセンブリとフレンド アセンブリの両方は未署名であるか、または両方のアセンブリが強い名前で署名されている必要があります。
両方のアセンブリが符号なしの場合、 assemblyName
引数は、ディレクトリ パスまたはファイル名拡張子なしで指定されたフレンド アセンブリの名前で構成されます。
両方のアセンブリが厳密な名前で署名されている場合、 InternalsVisibleToAttribute コンストラクターの引数は、ディレクトリ パスまたはファイル名拡張子のないアセンブリの名前と、完全な公開キー (公開キー トークンではなく) で構成されている必要があります。 厳密な名前付きアセンブリの完全な公開キーを取得するには、この記事の後半の「 完全な公開キーの取得 」セクションを参照してください。 厳密な名前付きアセンブリで InternalsVisibleToAttribute を使用する方法の詳細については、 InternalsVisibleToAttribute コンストラクターを参照してください。
引数に CultureInfo、 Version、または ProcessorArchitecture フィールドの値を含めないでください。Visual Basic、C#、および C++ コンパイラはこれをコンパイラ エラーとして扱います。 エラーとして扱わないコンパイラ (IL アセンブラー (ILAsm.exe) など) を使用していて、アセンブリに厳密な名前が付けられている場合、指定したフレンド アセンブリがMethodAccessException属性を含むアセンブリに初めてアクセスすると、InternalsVisibleToAttribute例外がスローされます。
この属性の使用方法の詳細については、「 フレンド アセンブリ と C++ フレンド アセンブリ」を参照してください。
完全な公開キーを取得する
厳密な名前ツール (Sn.exe) を使用して、厳密な名前付きキー (.snk) ファイルから完全な公開キーを取得できます。 これを行うには、次の手順を実行します。
厳密な名前付きキーのファイルから公開キーを別ファイルに抽出します。
Sn -p <snk_file> <outfile>
完全な公開キーをコンソールに表示します。
Sn -tp <outfile>
完全な公開キーの値をコピーしてソース コードに貼り付けます。
C を使用してフレンド アセンブリをコンパイルする#
C# コンパイラを使用してフレンド アセンブリをコンパイルする場合は、 /out コンパイラ オプションを使用して、出力ファイル (.exe または .dll) の名前を明示的に指定する必要があります。 これは、コンパイラが外部参照にバインドする時点で、ビルド中のアセンブリの名前をまだ生成していないために必要です。 Visual Basic コンパイラでは /out コンパイラ オプションは省略可能です。F# コンパイラでフレンド アセンブリをコンパイルする場合は、対応する -out または -o コンパイラ オプションを使用しないでください。
C++ を使用してフレンド アセンブリをコンパイルする
C++ では、 InternalsVisibleToAttribute 属性によって内部メンバーをフレンド アセンブリからアクセスできるようにするには、C++ ディレクティブで as_friend
属性を使用する必要があります。 詳細については、「 フレンド アセンブリ (C++)」を参照してください。
.NET