[C#][Winform] 특정 object를 .resx 파일 (resource 파일) 안에 넣기

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

263AAA4A56F0025B07 ([C#][Winform] 특정 object를 .resx 파일 (resource 파일) 안에 넣기)
디렉터리를 설정하는데 직접 선택할 수 있게만 해 두었다!
이런 망할 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 파일을 메모장 등등으로 열고,

2217923C56F00FA22C ([C#][Winform] 특정 object를 .resx 파일 (resource 파일) 안에 넣기)

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

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

 

Leave a Reply

Your email address will not be published.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.