윈폼 프로그래밍을 하다 한 가지 난관에 봉착했었는데, 바로 어떤 패키지를 사용하기 위해서는 '목표 라이브러리 (dll)'이 들어있는 디렉터리의 수동 설정이 필요하다는 점이었습니다.



디렉터리를 설정하는데 직접 선택할 수 있게만 해 두었다!

이런 망할 X들...



저 부분(VlcLibDirectory) 자체는 DirectoryInfo 형식으로, 저기에서 경로를 선택하면 해당 경로가 DirectoryInfo 형식으로 만들어진 후에 변환을 거쳐 .resx 파일 내에 저장이 되는 것을 알았습니다.

그래서 해당 정보가 저장되어 있는 .resx 파일을 열어보았으나 알 수 없는 문자열의 연속이 데이터로 저장되어 있을 뿐이었습니다.

(예 : AAEAAAD/////AQAAAAAAAAAEAQAAABdTeXN0ZW0uSU8uRGlyZWN0b3J5SW5mbwIAAAAMT3JpZ2luYWxQYXRoCEZ1b

GxQYXRoAQEGAgAAAAZDOlx2bGMJAgAAAAs=)


이 문자열 자체가 c# 내의 어떤 object가 변환된 상태이므로, 사용자 경로로 초기화를 시킨 DirectoryInfo 를 따로 저런 텍스트로 변환한 뒤에 직접 .resx 파일 내에 입력해주면 데이터가 들어가지 않을까 생각을 했었습니다.


그리고 들어갔습니다.(!)

많은 삽질을 거듭했었지만...


그리하여 그 변환 소스 코드는 다음과 같습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
private System.String ConvertToBase64String(System.Object input)        
{            
    System.IO.MemoryStream tmpstream = new System.IO.MemoryStream();
    System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bin_formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
 
    bin_formatter.Serialize(tmpstream, input);
    System.Byte[] byte_arr = tmpstream.ToArray();
    System.Char[] char_arr = new System.Char[1024];
    System.Convert.ToBase64CharArray(byte_arr, 0, byte_arr.Length, char_arr, 0);
    System.String result_str = new System.String(char_arr);
 
    return result_str;
}
 
cs



string result_string = ConvertToBase64String(원하는_object); 이렇게 사용하면 원하는 object (제가 알기로 모든 type, 즉 int, string 등등은 물론이고 DirectoryInfo 등등도 포함) 가 대응하는 string으로 변환됩니다. 그리고 이 출력된 코드를 복사한 뒤 .resx 파일을 메모장 등등으로 열고,




위 스샷처럼 value 안에 넣으면 정상 적용됩니다. 원하는 object 자체가 resource 파일(.resx) 안에 포함된 셈이죠.


(이 경우에만 테스트해 보았고 급하게 문제 해결을 위해 작성한 코드라, 범용성이나 코드 완전성은 떨어질 수 있습니다)

저작자 표시 비영리
신고

설정

트랙백

댓글