System.Runtime.CompilerServices.InternalsVisibleToAttribute 클래스

이 문서에서는 이 API에 대한 참조 설명서에 대한 추가 설명서를 제공합니다.

특성은 InternalsVisibleToAttribute 현재 어셈블리 내에서만 일반적으로 표시되는 형식이 지정된 어셈블리에 표시되도록 지정합니다.

일반적으로 C#의 범위 또는FriendVisual Basic의 범위가 있는 형식 및 멤버 internal 는 정의된 어셈블리에서만 표시됩니다. 범위(Protected FriendVisual Basic의 범위)가 있는 protected internal 형식 및 멤버는 자체 어셈블리 또는 포함하는 클래스에서 파생된 형식에만 표시됩니다. 범위가 있는 private protected 형식 및 멤버(Private Protected Visual Basic의 범위)는 포함하는 클래스 또는 현재 어셈블리 내의 포함하는 클래스에서 파생된 형식에 표시됩니다.

특성은 InternalsVisibleToAttribute 이러한 형식 및 멤버를 friend 어셈블리라고도 하는 지정된 어셈블리의 형식에도 표시되도록 합니다. 이는 (FriendVisual Basic의 경우), (Protected FriendVisual Basic의 경우) protected internalprivate protected (Private ProtectedVisual Basic의 경우) 멤버에만 internal 적용되지만 해당 멤버에는 적용되지 않습니다private.

참고 항목

(Private ProtectedVisual Basic에서) 멤버 InternalsVisibleToAttribute 의 경우 특성은 멤버의 private protected 포함하는 클래스에서 파생되는 형식으로만 접근성을 확장합니다.

특성은 어셈블리 수준에서 적용됩니다. 즉, 소스 코드 파일의 시작 부분에 포함되거나 Visual Studio 프로젝트의 AssemblyInfo 파일에 포함될 수 있습니다. 특성을 사용하여 현재 어셈블리의 내부 형식 및 멤버에 액세스할 수 있는 단일 friend 어셈블리를 지정할 수 있습니다. 여러 friend 어셈블리를 두 가지 방법으로 정의할 수 있습니다. 다음 예제와 같이 개별 어셈블리 수준 특성으로 표시할 수 있습니다.

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

다음 예제와 같이 별도의 InternalsVisibleToAttribute 태그와 함께 표시할 수도 있지만 단일 assembly 키워드(keyword) 표시할 수도 있습니다.

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

friend 어셈블리는 생성자로 식별됩니다 InternalsVisibleToAttribute . 현재 어셈블리와 friend 어셈블리는 모두 서명되지 않아야 합니다. 그렇지 않으면 두 어셈블리가 모두 강력한 이름으로 서명되어야 합니다.

두 어셈블리가 모두 서명 assemblyName 되지 않은 경우 인수는 디렉터리 경로 또는 파일 이름 확장명 없이 지정된 friend 어셈블리의 이름으로 구성됩니다.

두 어셈블리가 모두 강력한 이름으로 서명된 경우 생성자에 대한 InternalsVisibleToAttribute 인수는 디렉터리 경로 또는 파일 이름 확장명 없이 어셈블리의 이름과 공개 키 토큰이 아닌 전체 공개 키로 구성되어야 합니다. 강력한 이름의 어셈블리의 전체 공개 키를 얻으려면 이 문서의 뒷부분에 있는 전체 공개 키 가져오기 섹션을 참조하세요. 강력한 이름의 어셈블리를 사용하는 InternalsVisibleToAttribute 방법에 대한 자세한 내용은 생성자를 참조 InternalsVisibleToAttribute 하세요.

인수에 , Version또는 ProcessorArchitecture 필드에 대한 CultureInfo값을 포함하지 마세요. Visual Basic, C#및 C++ 컴파일러는 이를 컴파일러 오류로 처리합니다. IL 어셈블러(ILAsm.exe)와 같이 오류로 처리하지 않는 컴파일러를 사용하고 어셈블리의 이름이 MethodAccessException 강력한 경우 지정된 friend 어셈블리가 특성이 포함된 어셈블리에 처음 액세스할 때 예외가 throw됩니다InternalsVisibleToAttribute.

이 특성을 사용하는 방법에 대한 자세한 내용은 Friend 어셈블리C++ friend 어셈블리를 참조하세요.

전체 공개 키 가져오기

강력한 이름 도구(Sn.exe)를 사용하여 강력한 이름의 키(.snk) 파일에서 전체 공개 키를 검색할 수 있습니다. 이렇게 하려면 다음 단계를 수행합니다.

  1. 강력한 이름의 키 파일에서 공개 키를 별도의 파일로 추출합니다.

    Sn -p <snk_file> <outfile>

  2. 콘솔에 전체 공개 키를 표시합니다.

    Sn -tp <outfile>

  3. 전체 공개 키 값을 복사하여 소스 코드에 붙여넣습니다.

C를 사용하여 friend 어셈블리 컴파일#

C# 컴파일러를 사용하여 friend 어셈블리를 컴파일하는 경우 /out 컴파일러 옵션을 사용하여 출력 파일의 이름(.exe 또는 .dll)을 명시적으로 지정해야 합니다. 컴파일러가 외부 참조에 바인딩할 때 작성하고 있는 어셈블리에 대해 이름을 생성하지 않았기 때문에 이 과정이 필요합니다. /out 컴파일러 옵션은 Visual Basic 컴파일러에 대한 선택 사항이며 F# 컴파일러를 사용하여 friend 어셈블리를 컴파일할 때는 해당 -out 또는 -o 컴파일러 옵션을 사용하면 안 됩니다.

C++를 사용하여 friend 어셈블리 컴파일

C++에서 특성에서 사용하도록 설정된 InternalsVisibleToAttribute 내부 멤버를 friend 어셈블리에 액세스할 수 있도록 하려면 C++ 지시문의 특성을 사용해야 as_friend 합니다. 자세한 내용은 Friend 어셈블리(C++)를 참조하세요.