퇴근5분전

 

 이번 프로젝트를 시작하면서 공통쪽을 준비하면서 다국어 관련 정보를 찾아봤다.

예전에 다국어 관련 테스트 했을때의 방법은 폼개발을 해놓고

 폼에서 Localization 프로퍼티 true 맞추고 Language를 변경하면 컨트롤에 리소스 파일이 하나 생긴다. 이를 이용해서 적용하는 방법이 있다.

 

이번에 찾은 방법은 좀 다르다. WPF처럼 리소스를 별도로 관리할수 있는 방법이다.

Dll_Resource 프로젝트를 만들고 여기에 각 언어별 리소스 파일을 만든다.

 

그리고 Demo_Resource는 Dll_Resource를 참조한다.

 

그리고 Dll_Resource는 Demo_Resource를 FriendAssembly 로 지정한다.

 

오잉??? 여기서 FriendAssembly 라는걸 처음 접했다.

 

Resouce의 접근자가 Internal로 지정되어 있는데 이를 public으로 변경 후 접근해도 되겠지만...

 

어셈블리끼리 친구먹게 해준다.

 

internal 접근자는 어셈블리 내에서 '공개' 제한자인데 어셈블리 밖에서 접근하려면 프로퍼티는 상속빼고는 접근이 안된다.

 

이걸 Dll_Resource 의 Assembly.cs에


// Assembly Frend
[assembly: InternalsVisibleTo("Demo_Resource")]

 

지정해주면!!! 접근이 가능하고

 

Demo_Resource의 소스코드 작성시

 

  apply(  Dll_Resource.Properties.Resources.ResourceManager  );

 

이렇게 접근이 가능하다.

 

>> 혼동하지 말기..

  리소스 접근한다고

      ResourceManager 객체로 로딩해서 접근하려고 하니

       자꾸 서명하라고 에러 뜨고 그런다. 서명을해도  공개키를 FriendAssembly 지정할때 적어주어야 한다는데...

          https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/assemblies-gac/how-to-create-signed-friend-assemblies

 

         음.... 근데 PublicKey 를??? 어떻게 얻지?.... 서명하고 키열어보면 ...