internal 접근자는 현재 어셈블리에서만 접근 가능합니다.

 

솔루션에 프로젝트를 생성하여 테스트를 진행하고자 하면 internal로 설정된 Class 및 개체에는 접근이 불가합니다.

 

public으로 변경하면 배포시 접근 가능하다는 찝찝함이 존재해버립니다.

 

 

InternalsVisibleTo라는 Attribute Class를 이용해서 특정 어셈블리에서만 internal로 접근 가능하게 설정 할 수 있습니다.

 

테스트하고자 하는 프로젝트의 AssemblyInfo 클래스에 아래의 값을 작성해주 시면 되겠습니다.

 

 

 

 //해당 Assembly에는 internal 접근 가능

[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("LogAnalyzerTests")]

 

 

 

우측에 IWebService 인터페이스의 접근자는 internal인데 테스트 프로젝트에서 접근하고 있는것을 확인 하실 수 있습니다.

 

 

 

 

 

 

 

일반적으로는 위와같이 진행하면 문제가없지만, 현재 어셈블리와 지정할 어셈블리 모두 서명이 되지 않아야 합니다.

 

둘중에 하나라도 서명이 되어있다면 강력한 이름으로 서명되어야합니다. 강력한 이름은 Sn.exe를 이용하여 생성합니다.(.snk파일에서 추출)

 

  1. 강력한 이름의 키 파일에서 별도의 파일로 공개 키를 추출합니다.

    Sn -p snk_file outfile

  2. 전체 공개 키를 콘솔에 표시합니다.

    Sn -tp outfile

  3. 전체 공개 키 값을 복사하여 소스 코드에 붙여 넣습니다.

 

 

//강력한 이름으로 접근

[assembly: InternalsVisibleTo("LogAnalyzerTests, PublicKey=002400000480000094" +

                              "0000000602000000240000525341310004000" +

                              "001000100bf8c25fcd44838d87e245ab35bf7" +

                              "3ba2615707feea295709559b3de903fb95a93" +

                              "3d2729967c3184a97d7b84c7547cd87e435b5" +

                              "6bdf8621bcb62b59c00c88bd83aa62c4fcdd4" +

                              "712da72eec2533dc00f8529c3a0bbb4103282" +

                              "f0d894d5f34e9f0103c473dce9f4b457a5dee" +

                              "fd8f920d8681ed6dfcb0a81e96bd9b176525a" +

                              "26e0b3")]

  

 

참조 : MSDN

 

+ Recent posts