방법: 서명된 Friend 어셈블리 만들기
업데이트: 2007년 11월
이 예제에서는 강력한 이름이 사용되는 어셈블리에 friend 어셈블리를 사용하는 방법을 보여 줍니다. 두 어셈블리 모두 강력한 이름이 지정되어야 합니다. 이 예제의 두 어셈블리에서는 같은 키를 사용하지만 두 어셈블리에 서로 다른 키를 사용할 수도 있습니다.
Visual Studio에서 서명된 어셈블리와 friend 어셈블리를 만들려면
Visual Studio 명령 프롬프트를 엽니다.
강력한 이름 도구로 다음 명령 시퀀스를 사용하여 키 파일을 생성하고 공개 키를 표시합니다. 자세한 내용은 강력한 이름 도구(Sn.exe)를 참조하십시오.
이 예제에 대한 강력한 이름의 키를 생성하고 FriendAssemblies.snk 파일에 저장합니다.
sn -k FriendAssemblies.snk
FriendAssemblies.snk에서 공개 키를 추출하여 FriendAssemblies.publickey에 넣습니다.
sn -p FriendAssemblies.snk FriendAssemblies.publickey
FriendAssemblies.publickey 파일에 저장된 공개 키를 표시합니다.
sn -tp FriendAssemblies.publickey
이름이 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
FriendAssembliesSnA.vb를 컴파일하고 서명합니다.
Vbc.exe /target:library /keyfile:FriendAssemblies.snk FriendAssembliesSnA.vb
이름이 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
FriendAssembliesSnB.vb를 컴파일하고 서명합니다.
Vbc.exe /keyfile:FriendAssemblies.snk /r:FriendAssembliesSnA.dll FriendAssembliesSnB.vb
컴파일러에서 생성된 어셈블리 이름은 InternalsVisibleToAttribute 특성에 전달된 friend 어셈블리와 일치해야 합니다. /out 컴파일러 옵션을 사용하여 어셈블리를 명시적으로 설정할 수 있습니다. 자세한 내용은 /out(Visual Basic)을 참조하십시오.
FriendAssembliesSnB.exe를 실행합니다.
프로그램은 "Friend Assemblies Sample"이라는 문자열이 포함된 메시지 상자를 표시합니다.
보안
InternalsVisibleToAttribute 특성과 StrongNameIdentityPermission 클래스에는 유사점이 있습니다. 가장 큰 차이는 StrongNameIdentityPermission은 코드의 특정 섹션을 실행할 보안 권한을 요청할 수 있는 반면 InternalsVisibleToAttribute 특성은 Friend 형식과 멤버의 표시 유형을 제어한다는 점입니다.