InternalsVisibleToAttribute(String) コンストラクター
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
指定したフレンド アセンブリの名前を使用して、InternalsVisibleToAttribute クラスの新しいインスタンスを初期化します。
public:
InternalsVisibleToAttribute(System::String ^ assemblyName);
public InternalsVisibleToAttribute (string assemblyName);
new System.Runtime.CompilerServices.InternalsVisibleToAttribute : string -> System.Runtime.CompilerServices.InternalsVisibleToAttribute
Public Sub New (assemblyName As String)
パラメーター
- assemblyName
- String
フレンド アセンブリの名前。
例
署名付きアセンブリ
次の例では、InternalsVisibleToAttribute 属性を使用して、署名されたアセンブリ内の AppendDirectorySeparator
という名前の internal
メソッドを別の署名済みアセンブリから参照できるようにしています。 内部 AppendDirectorySeparator
メソッドを含む FileUtilities
クラスを定義します。
InternalsVisibleToAttribute 属性は、FileUtilities
クラスを含むアセンブリに適用されます。 この属性を使用すると、Friend1
という名前のアセンブリがこの内部メンバーにアクセスできます。
//
// The source code should be saved in a file named Example1.cs. It
// can be compiled at the command line as follows:
//
// csc /t:library /keyfile:<snkfilename> Assembly1.cs
//
// The public key of the Friend1 file should be changed to the full
// public key stored in your strong-named key file.
//
using System;
using System.IO;
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("Friend1, PublicKey=002400000480000094" +
"0000000602000000240000525341310004000" +
"001000100bf8c25fcd44838d87e245ab35bf7" +
"3ba2615707feea295709559b3de903fb95a93" +
"3d2729967c3184a97d7b84c7547cd87e435b5" +
"6bdf8621bcb62b59c00c88bd83aa62c4fcdd4" +
"712da72eec2533dc00f8529c3a0bbb4103282" +
"f0d894d5f34e9f0103c473dce9f4b457a5dee" +
"fd8f920d8681ed6dfcb0a81e96bd9b176525a" +
"26e0b3")]
public class FileUtilities
{
internal static string AppendDirectorySeparator(string dir)
{
if (!dir.Trim().EndsWith(Path.DirectorySeparatorChar.ToString()))
return dir.Trim() + Path.DirectorySeparatorChar;
else
return dir;
}
}
'
' The source code should be saved in a file named Example1.cs. It
' can be compiled at the command line as follows:
'
' vbc Assembly1.vb /t:library /keyfile:<snkfilename>
'
' The public key of the Friend1 file should be changed to the full
' public key stored in your strong-named key file.
'
Imports System.IO
Imports System.Runtime.CompilerServices
<Assembly:InternalsVisibleTo("Friend1, PublicKey=002400000480000094" + _
"0000000602000000240000525341310004000" + _
"001000100bf8c25fcd44838d87e245ab35bf7" + _
"3ba2615707feea295709559b3de903fb95a93" + _
"3d2729967c3184a97d7b84c7547cd87e435b5" + _
"6bdf8621bcb62b59c00c88bd83aa62c4fcdd4" + _
"712da72eec2533dc00f8529c3a0bbb4103282" + _
"f0d894d5f34e9f0103c473dce9f4b457a5dee" + _
"fd8f920d8681ed6dfcb0a81e96bd9b176525a" + _
"26e0b3")>
Public Class FileUtilities
Friend Shared Function AppendDirectorySeparator(dir As String) As String
If Not dir.Trim().EndsWith(Path.DirectorySeparatorChar) Then
Return dir.Trim() + Path.DirectorySeparatorChar
Else
Return dir
End If
End Function
End Class
次の例を Friend1
という名前の厳密な名前のアセンブリにコンパイルすると、Assembly1
アセンブリの内部にある場合でも、FileUtilities.AppendDirectorySeparator
メソッドを正常に呼び出すことができます。 コマンド ラインから C# でコンパイルする場合は、コンパイラが外部参照にバインドするときにフレンド アセンブリの名前を使用できるようにするには、/out コンパイラ スイッチを使用する必要があります。
//
// The assembly that exposes its internal types to this assembly should be
// named Assembly1.dll.
//
// The public key of this assembly should correspond to the public key
// specified in the class constructor of the InternalsVisibleTo attribute in the
// Assembly1 assembly.
//
#using <Assembly1.dll> as_friend
using namespace System;
void main()
{
String^ dir = L"C:\\Program Files";
dir = FileUtilities::AppendDirectorySeparator(dir);
Console::WriteLine(dir);
}
// The example displays the following output:
// C:\Program Files\
//
// The source code should be saved in a file named Friend1.cs. It
// can be compiled at the command line as follows:
//
// csc /r:Assembly1.dll /keyfile:<snkfilename> /out:Friend1.dll Friend1.cs
//
// The public key of the Friend1 assembly should correspond to the public key
// specified in the class constructor of the InternalsVisibleTo attribute in the
// Assembly1 assembly.
//
using System;
public class Example
{
public static void Main()
{
string dir = @"C:\Program Files";
dir = FileUtilities.AppendDirectorySeparator(dir);
Console.WriteLine(dir);
}
}
// The example displays the following output:
// C:\Program Files\
'
' The source code should be saved in a file named Friend1.vb. It
' can be compiled at the command line as follows:
'
' vbc Friend1.vb /r:Assembly1.dll /keyfile:<snkfilename>
'
' The public key of the Friend1 assembly should correspond to the public key
' specified in the class constructor of the InternalsVisibleTo attribute in the
' Assembly1 assembly.
'
Module Example
Public Sub Main()
Dim dir As String = "C:\Program Files"
dir = FileUtilities.AppendDirectorySeparator(dir)
Console.WriteLine(dir)
End Sub
End Module
' The example displays the following output:
' C:\Program Files\
次の例では、InternalsVisibleToAttribute 属性を使用して、署名されていないアセンブリの internal
メンバーを別の符号なしアセンブリから参照できるようにしています。 この属性により、UtilityLib
という名前のアセンブリ内の internal
StringLib.IsFirstLetterUpperCase
メソッドが、Friend2
という名前のアセンブリ内のコードに確実に表示されます。 UtilityLib.dllのソース コードを次に示します。
using System;
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleToAttribute("Friend2")]
namespace Utilities.StringUtilities
{
public class StringLib
{
internal static bool IsFirstLetterUpperCase(String s)
{
string first = s.Substring(0, 1);
return first == first.ToUpper();
}
}
}
Imports System.Runtime.CompilerServices
<assembly: InternalsVisibleTo("Friend2")>
Namespace Utilities.StringUtilities
Public Class StringLib
Friend Shared Function IsFirstLetterUpperCase(s As String) As Boolean
Dim first As String = s.Substring(0, 1)
Return first = first.ToUpper()
End Function
End Class
End Namespace
署名されていないアセンブリ を
次の例では、Friend2
アセンブリのソース コードを示します。 コマンド ラインから C# でコンパイルする場合は、コンパイラが外部参照にバインドするときにフレンド アセンブリの名前を使用できるようにするには、/out コンパイラ スイッチを使用する必要があります。
#using <UtilityLib.dll> as_friend
using namespace System;
using namespace Utilities::StringUtilities;
void main()
{
String^ s = "The Sign of the Four";
Console::WriteLine(StringLib::IsFirstLetterUpperCase(s));
}
using System;
using Utilities.StringUtilities;
public class Example
{
public static void Main()
{
String s = "The Sign of the Four";
Console.WriteLine(StringLib.IsFirstLetterUpperCase(s));
}
}
Imports Utilities.StringUtilities
Module Example
Public Sub Main()
Dim s As String = "The Sign of the Four"
Console.WriteLine(StringLib.IsFirstLetterUpperCase(s))
End Sub
End Module
注釈
InternalsVisibleToAttribute コンストラクターは、フレンド アセンブリを定義します。これは、現在のアセンブリの内部およびプライベートで保護された型とメンバーにアクセスできるアセンブリです。
現在のアセンブリとフレンド アセンブリの両方が符号なしであるか、両方とも厳密な名前で署名されている必要があります。 (厳密な名前付きアセンブリの詳細については、「厳密な名前付きアセンブリを作成して使用する」を参照してください)。両方が符号なしの場合、assemblyName
引数は、ディレクトリ パスまたはファイル拡張子なしで指定されたフレンド アセンブリの名前で構成されます。 両方が署名されている場合、assemblyName
は、ディレクトリ パスまたはファイル名拡張子のないフレンド アセンブリの名前と、完全な公開キー (公開キー トークンではなく) で構成されます。 厳密な名前の他のコンポーネント (カルチャ、バージョン、プロセッサ アーキテクチャ情報を提供するものなど) は、assemblyName
引数で指定できません。
大事な
C# コンパイラを使用してフレンド アセンブリをコンパイルする場合は、/out コンパイラ オプションを使用して、出力ファイル (.exe または .dll) の名前を明示的に指定する必要があります。 これは、コンパイラが外部参照にバインドする時点で、ビルド中のアセンブリの名前をまだ生成していないために必要です。 /out コンパイラ オプションは Visual Basic コンパイラでは省略可能です。F# コンパイラでフレンド アセンブリをコンパイルする場合は、対応する -outまたは -o コンパイラ オプションを使用しないでください。
Sn.exe (厳密な名前ツール) を使用して、厳密な名前付きキー (.snk) ファイルから完全な公開キーを取得できます。 これを行うには、次の手順を実行します。
厳密な名前のキー ファイルから別のファイルに公開キーを抽出します。
Sn -psnk_fileoutfile
完全な公開キーをコンソールに表示します。
Sn -tpoutfile
完全な公開キーの値をコピーしてソース コードに貼り付けます。
InternalsVisibleToAttribute 属性の使用方法の詳細については、次の記事を参照してください。
適用対象
.NET