System.Runtime.CompilerServices.InternalsVisibleToAttribute 클래스
이 문서에서는 이 API에 대한 참조 설명서에 대한 추가 설명서를 제공합니다.
특성은 InternalsVisibleToAttribute 현재 어셈블리 내에서만 일반적으로 표시되는 형식이 지정된 어셈블리에 표시되도록 지정합니다.
일반적으로 C#의 범위 또는Friend
Visual Basic의 범위가 있는 형식 및 멤버 internal
는 정의된 어셈블리에서만 표시됩니다. 범위(Protected Friend
Visual Basic의 범위)가 있는 protected internal
형식 및 멤버는 자체 어셈블리 또는 포함하는 클래스에서 파생된 형식에만 표시됩니다. 범위가 있는 private protected
형식 및 멤버(Private Protected
Visual Basic의 범위)는 포함하는 클래스 또는 현재 어셈블리 내의 포함하는 클래스에서 파생된 형식에 표시됩니다.
특성은 InternalsVisibleToAttribute 이러한 형식 및 멤버를 friend 어셈블리라고도 하는 지정된 어셈블리의 형식에도 표시되도록 합니다. 이는 (Friend
Visual Basic의 경우), (Protected Friend
Visual Basic의 경우) protected internal
및 private protected
(Private Protected
Visual Basic의 경우) 멤버에만 internal
적용되지만 해당 멤버에는 적용되지 않습니다private
.
참고 항목
(Private Protected
Visual 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) 파일에서 전체 공개 키를 검색할 수 있습니다. 이렇게 하려면 다음 단계를 수행합니다.
강력한 이름의 키 파일에서 공개 키를 별도의 파일로 추출합니다.
Sn -p <snk_file> <outfile>
콘솔에 전체 공개 키를 표시합니다.
Sn -tp <outfile>
전체 공개 키 값을 복사하여 소스 코드에 붙여넣습니다.
C를 사용하여 friend 어셈블리 컴파일#
C# 컴파일러를 사용하여 friend 어셈블리를 컴파일하는 경우 /out 컴파일러 옵션을 사용하여 출력 파일의 이름(.exe 또는 .dll)을 명시적으로 지정해야 합니다. 컴파일러가 외부 참조에 바인딩할 때 작성하고 있는 어셈블리에 대해 이름을 생성하지 않았기 때문에 이 과정이 필요합니다. /out 컴파일러 옵션은 Visual Basic 컴파일러에 대한 선택 사항이며 F# 컴파일러를 사용하여 friend 어셈블리를 컴파일할 때는 해당 -out 또는 -o 컴파일러 옵션을 사용하면 안 됩니다.
C++를 사용하여 friend 어셈블리 컴파일
C++에서 특성에서 사용하도록 설정된 InternalsVisibleToAttribute 내부 멤버를 friend 어셈블리에 액세스할 수 있도록 하려면 C++ 지시문의 특성을 사용해야 as_friend
합니다. 자세한 내용은 Friend 어셈블리(C++)를 참조하세요.
.NET
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기