현재 작업중인 Application 에서 사용하는 XML File 을 Embedded Resource 로 사용해야할 일이 발생했습니다.

해서

아래와 같이
Project 에 "Data" Folder 를 생성하고 settings.xml 이라는 xml 파일을 추가한 후
Property 창에의 "Build Action" 옵션을 "Embedded Resource" 로 설정하였습니다.



googling 을 통해서 얻은 지식으루다가 아래와 같이 코딩을 이어 갔습니다.
하지만 2번을 통과하면 값을 가져오지 못합니다.

    1         Dim asm As System.Reflection.Assembly = Assembly.GetExecutingAssembly()

    2         Dim xmlStream As System.IO.Stream = asm.GetManifestResourceStream("WindowsApplication5.Data.settings.xml")

    3         Dim xmlDoc As XmlDocument = New XmlDocument()

    4         xmlDoc.Load(xmlStream)

    5         Dim xmlDs = XDocument.Parse(xmlDoc.OuterXml)


그 이유를 찾아 보았습니다.
짐작이 가는게 있었습니다.

reflector 를 이용해서 exe 파일을 까보았더랬죠.

역시나.. VB 는 폴더명을 Namespace 로 포함하지 않는 군요...
당연히 똑같겠지만 서도... ilDAsm 파일로도 열어봤습니다. ^^'


C#은 어떨까요?
눈으로 직접 확인해 봐야겠죠? ㅋㅋㅋ
위 VB Project와 동일한 환경으로 Xml 파일을 추가하였습니다.


Build 를 하고
Reflector 와 ilDAsm 으로 살펴보니...



그렇군요...

"Data" Folder 명이 Namespace 에 포함되어 있는 것을 볼 수 있습니다.


단순히 C#  코드만 복사해서 사용하려다 보니 나온 오류였습니다. ㅋㅋㅋ

VB.NET 에서는 아래와 같이 사용해야겠네요? ^^
 

    1         Dim asm As System.Reflection.Assembly = Assembly.GetExecutingAssembly()

    2         Dim xmlStream As System.IO.Stream = asm.GetManifestResourceStream("WindowsApplication5.settings.xml")

    3         Dim xmlDoc As XmlDocument = New XmlDocument()

    4         xmlDoc.Load(xmlStream)

    5         Dim xmlDs = XDocument.Parse(xmlDoc.OuterXml)


그럼 이때 VB 는 C# 과 같이 Folder 별 Namespace 를 관리하지 않나? 라는 궁금증을 가지시는 분이 있으시겠죠?
네... 맞습니니다.

VB.Net 은 C# 과 같이 파일을 추가할 때 자동으로 Namespace Syntax 를 파일에 추가해 주지 않습니다.
개발자가 직접해주어하지요...
그래서 아래와 같은 상황에서 햇갈린다는 메세지를 띄워주게 됩니다.

이럴 때는 직접 Namespace 로 감싸주셔요... ^^

요런 점은 Microsoft VB Team 이 추가를 해줬으면 하는 바램이 있네요... 그쵸? ^^'



행복한 고수되십시요...


woojja ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\




 
반응형

+ Recent posts