유원 의회 소개 내부적으로 정의된 클래스의 멤버들(타입, 메서드, 속성, 변수, 이벤트 포함)은 같은 어셈블리에서만 접근할 수 있다는 것을 알고 있습니다(물론 여기서 말하는 것은 일반적인 방식이고, 반사를 통한 접근은 포함하지 않습니다). 이 규칙은 에 속해 있습니다. .NET 2.0은 약간 문제가 있어서, 어셈블리의 내부 멤버를 특정 멤버가 접근할 수 있도록 설정할 수 있습니다. 이 내부 구성원을 포함하는 어셈블리를 소스 어셈블리라고 부르고, 어셈블리 집합을 친구 어셈블리라고 부릅니다.
친구 어셈블리 사용 이 속성은 어셈블리 레벨에서 사용됩니다.
이렇게 하면 FriendAssembly 프로그램이 어셈블리를 참조한 후 내부 이름 속성에 접근할 수 있습니다. 일반적으로 이 어셈블리: InternalsVisibleTo("FriendAssembly")는 어셈블리 수준에 있으므로 AssemblyInfo.cs에 배치하는 것이 더 적합합니다.
InternalsToVisibleTo 사용 시기 사실 이 속성은 일반적인 애플리케이션에서는 사용되지 않으며, 이 속성을 남용해서는 안 됩니다. 일반적으로 잘 설계된 어셈블리는 외부에 개방될 필요가 없기 때문입니다. 하지만 유닛 테스트 시나리오에서는 이 기능을 활용할 수 있습니다. 이 기능을 통해 단위 테스트 코드가 내부 멤버에 접근할 수 있도록 지정할 수 있어, 해당 멤버들을 단위 테스트할 수 있습니다. 하지만 이 경우 소스 어셈블리에 친구 어셈블리의 이름을 죽음으로 써야 하므로 보안 문제가 발생합니다. 보안을 보장하려면 서명 어셈블리를 도입할 수 있습니다.
InternalsToVisibleTo 및 서명 어셈블리 친구 메타 어셈블리의 이름과 공개키를 InternalsVisibleTo에 직접 지정할 수 있습니다. VS 개발자 명령줄을 사용해 FriendAssembly의 공개 키를 생성합니다:
친구 어셈블리의 이름과 소스 어셈블리의 공개 키를 지정하세요:
사실, 친구 어셈블리는 소스 어셈블리를 참조하고, 서명된 어셈블리는 서명되지 않은 어셈블리를 참조하며, 서명된 어셈블리는 서명되지 않은 친구 어셈블리를 지정할 수 없으므로 서명된 어셈블리가 모두 서명되어야 합니다.
|