다음을 통해 공유


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 형식과 멤버의 표시 유형을 제어한다는 점입니다.

참고 항목

작업

방법: 서명되지 않은 Friend 어셈블리 만들기

방법: 서명된 Friend 어셈블리 만들기

개념

어셈블리

참조

InternalsVisibleToAttribute

어셈블리 링커(Al.exe)

/addmodule

기타 리소스

Visual Basic 컴파일러