다음을 통해 공유


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

업데이트: 2007년 11월

이 예제에서는 강력한 이름이 사용되는 어셈블리에 friend 어셈블리를 사용하는 방법을 보여 줍니다. 두 어셈블리 모두 강력한 이름이 지정되어야 합니다. 이 예제의 두 어셈블리에서는 같은 키를 사용하지만 두 어셈블리에 서로 다른 키를 사용할 수도 있습니다.

Visual Studio에서 서명된 어셈블리와 friend 어셈블리를 만들려면

  1. Visual Studio 명령 프롬프트를 엽니다.

  2. 강력한 이름 도구로 다음 명령 시퀀스를 사용하여 키 파일을 생성하고 공개 키를 표시합니다. 자세한 내용은 강력한 이름 도구(Sn.exe)를 참조하십시오.

    1. 이 예제에 대한 강력한 이름의 키를 생성하고 FriendAssemblies.snk 파일에 저장합니다.

      sn -k FriendAssemblies.snk

    2. FriendAssemblies.snk에서 공개 키를 추출하여 FriendAssemblies.publickey에 넣습니다.

      sn -p FriendAssemblies.snk FriendAssemblies.publickey

    3. FriendAssemblies.publickey 파일에 저장된 공개 키를 표시합니다.

      sn -tp FriendAssemblies.publickey

  3. 이름이 FriendAssembliesSnA.vb이고 다음 코드가 포함된 새 Visual Basic 파일을 만듭니다. 코드에서는 InternalsVisibleToAttribute 특성을 사용하여 FriendAssembliesSnB를 friend 어셈블리로 선언합니다.

    강력한 이름 도구는 실행될 때마다 새 공개 키를 생성합니다. 따라서 다음 예제에서처럼 다음 코드의 공개 키를 앞서 생성한 공개 키로 바꿔야 합니다.

    ' FriendAssembliesSnA.vb.
    ' Compile with: 
    ' Vbc.exe /target:library /keyfile:FriendAssemblies.snk FriendAssembliesSnA.vb
    Imports System.Runtime.CompilerServices
    
    ' Replace the value of PublicKey with your public key.
    <Assembly: InternalsVisibleTo("FriendAssembliesSnB, PublicKey=" & _
    "002400000480000094000000060200000024000052534131000400000100010065364c" & _
    "640a04ab7c4f06313779601ffb5d1284b381393ad2ede92b4bf91384bbfdb0f9b7ecf6" & _
    "a387b7f9348fc59366987429db41ee061c1a808eb408c4ebd9aebd0d4b19b721121a0d" & _
    "c66949f12878c4e2add5489f6208f49e67ddee4d0bb72fa6860a775b7e2232209efe8b" & _
    "4566ea8bd9319a4b8feb3ef4911e7a7d2e957a92")> 
    
    ' Friend class.
    Friend Class FriendAssembliesSnA
        Public Sub Test()
            MsgBox("Friend Assemblies Sample")
        End Sub
    End Class
    
  4. FriendAssembliesSnA.vb를 컴파일하고 서명합니다.

    Vbc.exe /target:library /keyfile:FriendAssemblies.snk FriendAssembliesSnA.vb

  5. 이름이 FriendAssembliesSnB.vb이고 다음 코드가 포함된 새 Visual Basic 파일을 만듭니다. FriendAssembliesSnA에서는 FriendAssembliesSnB를 friend 어셈블리로 지정했기 때문에 FriendAssembliesSnB의 코드는 Friend 형식 및 FriendAssembliesSnA의 멤버에 액세스할 수 있습니다.

    ' FriendAssembliesSnB.vb.
    ' Compile with: 
    ' Vbc.exe /keyfile:FriendAssemblies.snk /r:FriendAssembliesSnA.dll FriendAssembliesSnB.vb
    Module FriendAssembliesSnB
        Public Sub Main()
            ' Access a Friend class.
            Dim friendTest As New FriendAssembliesSnA
            friendTest.Test()
        End Sub
    End Module
    
  6. FriendAssembliesSnB.vb를 컴파일하고 서명합니다.

    Vbc.exe /keyfile:FriendAssemblies.snk /r:FriendAssembliesSnA.dll FriendAssembliesSnB.vb

    컴파일러에서 생성된 어셈블리 이름은 InternalsVisibleToAttribute 특성에 전달된 friend 어셈블리와 일치해야 합니다. /out 컴파일러 옵션을 사용하여 어셈블리를 명시적으로 설정할 수 있습니다. 자세한 내용은 /out(Visual Basic)을 참조하십시오.

  7. FriendAssembliesSnB.exe를 실행합니다.

    프로그램은 "Friend Assemblies Sample"이라는 문자열이 포함된 메시지 상자를 표시합니다.

보안

InternalsVisibleToAttribute 특성과 StrongNameIdentityPermission 클래스에는 유사점이 있습니다. 가장 큰 차이는 StrongNameIdentityPermission은 코드의 특정 섹션을 실행할 보안 권한을 요청할 수 있는 반면 InternalsVisibleToAttribute 특성은 Friend 형식과 멤버의 표시 유형을 제어한다는 점입니다.

참고 항목

작업

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

개념

Friend 어셈블리(Visual Basic)

참조

InternalsVisibleToAttribute

/keyfile

강력한 이름 도구(Sn.exe)

기타 리소스

강력한 이름의 어셈블리 만들기 및 사용