윈폼 프로그래밍을 하다 한 가지 난관에 봉착했었는데, 바로 어떤 패키지를 사용하기 위해서는 ‘목표 라이브러리 (dll)’이 들어있는 디렉터리의 수동 설정이 필요하다는 점이었습니다.
디렉터리를 설정하는데 직접 선택할 수 있게만 해 두었다!
이런 망할 X들…
저 부분(VlcLibDirectory) 자체는 DirectoryInfo 형식으로, 저기에서 경로를 선택하면 해당 경로가 DirectoryInfo 형식으로 만들어진 후에 변환을 거쳐 .resx 파일 내에 저장이 되는 것을 알았습니다.
그래서 해당 정보가 저장되어 있는 .resx 파일을 열어보았으나 알 수 없는 문자열의 연속이 데이터로 저장되어 있을 뿐이었습니다.
(예 : AAEAAAD/////AQAAAAAAAAAEAQAAABdTeXN0ZW0uSU8uRGlyZWN0b3J5SW5mbwIAAAAMT3JpZ2luYWxQYXRoCEZ1b
GxQYXRoAQEGAgAAAAZDOlx2bGMJAgAAAAs=)
이 문자열 자체가 c# 내의 어떤 object가 변환된 상태이므로, 사용자 경로로 초기화를 시킨 DirectoryInfo 를 따로 저런 텍스트로 변환한 뒤에 직접 .resx 파일 내에 입력해주면 데이터가 들어가지 않을까 생각을 했었습니다.
그리고 들어갔습니다(!)
많은 삽질을 거듭했었지만…
그리하여 그 변환 소스 코드는 다음과 같습니다.
[코드]
구현
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; }
적용
string result_string = ConvertToBase64String(원하는_object);
위와 같이 사용하면 원하는 object (제가 알기로 모든 type, 즉 int, string 등등은 물론이고 DirectoryInfo 등등도 포함) 가 대응하는 string으로 변환됩니다. 그리고 이 출력된 코드를 복사한 뒤 .resx 파일을 메모장 등등으로 열고,
위 스샷처럼 value 안에 넣으면 정상 적용됩니다. 원하는 object 자체가 resource 파일(.resx) 안에 포함된 셈이죠.
(이 경우에만 테스트해 보았고 급하게 문제 해결을 위해 작성한 코드라, 안정성 등이 떨어질 수 있습니다)