System.Runtime.CompilerServices.InternalsVisibleToAttribute クラス

この記事では、この API のリファレンス ドキュメントへの補足的な解説を提供します。

この属性は InternalsVisibleToAttribute 、通常、現在のアセンブリ内でのみ表示される型が、指定したアセンブリに対して表示されるように指定します。

通常、C# のスコープを持つinternal型とメンバー、または Friend Visual Basic のスコープは、定義されているアセンブリ内でのみ表示されます。 スコープ (Protected FriendVisual Basic のスコープ) を持つprotected internal型とメンバーは、独自のアセンブリ内、または包含クラスから派生した型にのみ表示されます。 スコープ (Private ProtectedVisual Basic のスコープ) を持つprivate protected型とメンバーは、現在のアセンブリ内の包含クラスから派生した包含クラスまたは型に表示されます。

この属性により InternalsVisibleToAttribute 、これらの型とメンバーは、指定されたアセンブリ (フレンド アセンブリと呼ばれます) 内の型にも表示されます。 これは、(FriendVisual Basic の場合)、protected internal(Protected FriendVisual Basic の場合)、および private protected (Private ProtectedVisual Basic の場合) メンバーにのみinternal適用されますが、メンバーには適用されませんprivate

Note

(Private ProtectedVisual Basic の) メンバーのprivate protected場合、この属性は、InternalsVisibleToAttributeメンバーの包含クラスから派生した型にのみアクセシビリティを拡張します。

属性はアセンブリ レベルで適用されます。 つまり、ソース コード ファイルの先頭に含めることができるか、Visual Studio プロジェクトの AssemblyInfo ファイルに含めることができます。 この属性を使用すると、現在のアセンブリの内部型とメンバーにアクセスできる 1 つのフレンド アセンブリを指定できます。 複数のフレンド アセンブリは、2 つの方法で定義できます。 次の例に示すように、個々のアセンブリ レベルの属性として表示できます。

[assembly:InternalsVisibleTo("Friend1a")]
[assembly:InternalsVisibleTo("Friend1b")]
<assembly:InternalsVisibleTo("Friend1a")>
<assembly:InternalsVisibleTo("Friend1b")>

また、次の例に示すように、個別InternalsVisibleToAttributeのタグを使用して 1 つのassemblyキーワード (keyword)で表示することもできます。

[assembly:InternalsVisibleTo("Friend2a"), 
          InternalsVisibleTo("Friend2b")]
<Assembly:InternalsVisibleTo("Friend2a"), _
 Assembly:InternalsVisibleTo("Friend2b")>

フレンド アセンブリはコンストラクターによって InternalsVisibleToAttribute 識別されます。 現在のアセンブリとフレンド アセンブリの両方が符号なしであるか、両方のアセンブリが厳密な名前で署名されている必要があります。

両方のアセンブリが符号なしの場合、 assemblyName 引数は、ディレクトリ パスまたはファイル名拡張子なしで指定されたフレンド アセンブリの名前で構成されます。

両方のアセンブリが厳密な名前で署名されている場合、コンストラクターの InternalsVisibleToAttribute 引数は、ディレクトリ パスまたはファイル名拡張子のないアセンブリの名前と、完全な公開キー (公開キー トークンではなく) で構成されている必要があります。 厳密な名前付きアセンブリの完全な公開キーを取得するには、この記事の後半の「完全な公開キーの取得」セクションを参照してください。 厳密な名前付きアセンブリでの使用 InternalsVisibleToAttribute の詳細については、コンストラクターを InternalsVisibleToAttribute 参照してください。

引数に 、VersionまたはProcessorArchitectureフィールドの値をCultureInfo含めないでください。Visual Basic、C#、および C++ コンパイラはこれをコンパイラ エラーとして扱います。 エラーとして扱わないコンパイラ (IL アセンブラー (ILAsm.exe) など) を使用していて、アセンブリに厳密な名前が付けられている場合は、MethodAccessException指定したフレンド アセンブリが属性を含むInternalsVisibleToAttributeアセンブリに初めてアクセスするときに例外がスローされます。

この属性の使用方法の詳細については、「フレンド アセンブリと C++ フレンド アセンブリ」を参照してください。

完全な公開キーを取得する

厳密な名前ツール (Sn.exe) を使用して、厳密な名前付きキー (.snk) ファイルから完全な公開キーを取得できます。 これを行うには、次の手順を実行します。

  1. 厳密な名前のキー ファイルから別のファイルに公開キーを抽出します。

    Sn -p <snk_file> <outfile>

  2. 完全な公開キーをコンソールに表示します。

    Sn -tp <outfile>

  3. 完全な公開キーの値をコピーしてソース コードに貼り付けます。

C を使用してフレンド アセンブリをコンパイルする#

C# コンパイラを使用してフレンド アセンブリをコンパイルする場合は、/out コンパイラ オプションを使用して出力ファイルの名前 (.exeまたは.dll) を明示的に指定する必要があります。 この指定は必ず行ってください。コンパイラが外部参照にバインドする時点ではまだ、ビルド中のアセンブリの名前が生成されていないためです。 Visual Basic コンパイラでは /out コンパイラ オプションは省略可能です。F# コンパイラでフレンド アセンブリをコンパイルする場合は、対応する -out または -o コンパイラ オプションを使用しないでください。

C++ を使用してフレンド アセンブリをコンパイルする

C++ では、フレンド アセンブリからアクセス可能な属性によって内部メンバーを InternalsVisibleToAttribute 有効にするには、C++ ディレクティブで属性を as_friend 使用する必要があります。 詳細は、フレンド アセンブリ (C++) を参照してください。