Friend 어셈블리(Visual Basic)
업데이트: 2007년 11월
Friend 어셈블리는 다른 어셈블리의 Friend 형식 및 멤버에 액세스할 수 있는 어셈블리입니다. 자세한 내용은 Friend(Visual Basic)를 참조하십시오. 어셈블리를 friend 어셈블리로 식별하면 다른 어셈블리에서 형식 및 멤버에 액세스할 수 있도록 하기 위해 해당 형식 및 멤버를 더 이상 public으로 표시하지 않아도 됩니다. 이는 다음과 같은 경우에 특히 편리합니다.
단위 테스트 동안 테스트 코드가 별도의 어셈블리에서 실행되지만 테스트되는 어셈블리에서 Friend로 표시된 멤버에 액세스해야 하는 경우
클래스 라이브러리를 개발할 때 라이브러리에 대한 추가 항목이 별도의 어셈블리에 포함되어 있지만 기존 어셈블리에서 Friend로 표시된 멤버에 액세스해야 하는 경우
설명
InternalsVisibleToAttribute 특성을 사용하여 지정된 어셈블리에 대한 하나 이상의 friend 어셈블리를 식별할 수 있습니다. 예를 들어 다음 예제와 같이 어셈블리 A에 InternalsVisibleToAttribute 특성을 포함하고 어셈블리 B를 friend 어셈블리로 지정하면 어셈블리 B는 어셈블리 A에서 Friend로 표시된 모든 형식과 멤버에 액세스할 수 있습니다.
Imports System.Runtime.CompilerServices
<Assembly: InternalsVisibleTo("FriendAssembliesB")>
' Friend class.
Friend Class FriendAssembliesA
Public Sub Test()
MsgBox("Friend Assemblies Sample Class")
End Sub
End Class
' Public class with a Friend method.
Public Class FriendAssembliesClassA
Friend Sub Test()
MsgBox("Friend Assemblies Sample Method")
End Sub
End Class
명시적으로 friend로 지정하는 어셈블리만 Friend 형식 및 멤버에 액세스할 수 있습니다. 예를 들어 어셈블리 B가 어셈블리 A의 friend이고 어셈블리 C가 어셈블리 B를 참조하는 경우 C는 A의 Friend 형식에 액세스할 수 없습니다.
컴파일러에서는 InternalsVisibleToAttribute 특성에 전달된 friend 어셈블리 이름에 대한 일부 기본적인 유효성 검사를 수행합니다. 어셈블리 A에서 B를 friend 어셈블리로 선언하는 경우 유효성 검사 규칙은 다음과 같습니다.
어셈블리 A에 강력한 이름이 지정된 경우 어셈블리 B에도 강력한 이름이 지정되어야 합니다. 특성에 전달되는 friend 어셈블리 이름은 어셈블리 이름과 어셈블리 B에 서명하는 데 사용되는 강력한 이름 키의 공개 키로 구성되어야 합니다.
InternalsVisibleToAttribute 특성에 전달되는 friend 어셈블리 이름은 어셈블리 B의 강력한 이름일 수 없습니다. 즉, 어셈블리 버전, 문화권, 아키텍처 또는 공개 키 토큰을 포함하지 않습니다.
어셈블리 A에 강력한 이름이 지정되지 않은 경우 friend 어셈블리 이름은 어셈블리 이름만으로 구성되어야 합니다. 자세한 내용은 방법: 서명되지 않은 Friend 어셈블리 만들기를 참조하십시오.
어셈블리 B에 강력한 이름이 지정된 경우 프로젝트 설정이나 명령줄 /keyfile 컴파일러 옵션을 사용하여 어셈블리 B의 강력한 이름 키를 지정해야 합니다. 자세한 내용은 방법: 서명된 Friend 어셈블리 만들기를 참조하십시오.
모듈 파일(.netmodule 확장명을 가진 파일)에서 어셈블리의 Friend 형식 및 메서드에 액세스하는 방법에 대한 자세한 내용은 /moduleassemblyname을 참조하십시오.
보안 정보: |
---|
InternalsVisibleToAttribute 특성과 StrongNameIdentityPermission 클래스에는 유사점이 있습니다. 가장 큰 차이는 StrongNameIdentityPermission은 코드의 특정 섹션을 실행할 보안 권한을 요청할 수 있는 반면 InternalsVisibleToAttribute 특성은 Friend 형식과 멤버의 표시 유형을 제어한다는 점입니다. |