2011-12-05 4 views
1

별도의 프로젝트에서 XML 파일을로드하려고합니다. 이러한 프로젝트 중 하나는 XML 문서 판독기를 호출하고 상대 디렉토리를 파일에 지정하는 경로를 가져 오는 게임 엔진입니다. 다른 프로젝트다른 프로젝트의 리소스를로드 중입니까?

string filePath = "Test.xml"; 

Npc npc = new Npc("somename", 2,filePath); 

Test.xml에서

XDocument doc; 

      try 
      { 
       Stream stream = this.GetType().Assembly.GetManifestResourceStream(path); 

       doc = XDocument.Load(stream); 
      } 
      catch 
      { 
       doc = XDocument.Load(path); 
      } 

엔진에서

은 다른 프로젝트의 루트 디렉토리에 있습니다. Npc 생성자는 Statistics 개체 생성자를 호출 한 다음 XDocument을로드하는 메서드를 호출합니다. 이 상황이 발생하면 filePath은 레이어를 통해 아래쪽으로 전달됩니다.

나는 this을보고 궁극적으로 성취하려고 노력하고있는 임베디드 리소스 예제를 시도해 보았습니다.

내가 뭘 잘못하고 있니? 파일이있는 곳이기 때문에

업데이트 나는 Chronos.Text.xmlText.xml을 변경했습니다.

try 
{ 
    Stream stream = this.GetType().Assembly.GetManifestResourceStream("Chronos.Test.xml"); //returns null 

    doc = XDocument.Load(stream); //Exception thrown 
} 
catch 
{ 
    doc = XDocument.Load(path); //File not found 
} 

답변

1

임베디드 리소스가 실행 파일에 직접 임베디드되어 내 디버거에서 내가 사용할 때 스트림이 단순히 경로로 null을 반환 것을 알 수있다. Assembly.GetManifestResourceStream()이 임베드 된 리소스에서 스트림을 열려고 시도하는 경우 리소스 이름은 AssemblyDefaultNamespace.Directory.Filename 형식이어야합니다. 다른 디렉토리에서 XML 파일을 열려고 시도 할 경우

, 당신은 XDocument.Load()전체 경로 또는 다른 디렉토리를 가리키는 현재 프로젝트 출력 디렉토리에서 상대 경로를 제공해야합니다.

또 다른 해결책은 다른 프로젝트의 데이터를 프로젝트에 복사하고 출력 디렉터리에 파일을 복사하도록 지정하는 것입니다.

+1

AssemblyDefaultNamespace 같은 것이 있습니까? 나는 그것을 찾을 수없는 것 같습니다. – zeboidlund

+0

트리에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하십시오. '응용 프로그램'탭에는 오른쪽 상단에 '기본 네임 스페이스'라는 옵션이 있습니다. – Coincoin

+0

답을 업데이트했습니다. 불행히도, 수신 한 모든 정보가 null입니다. 쿼리를 수정하기 위해 내가 할 수있는 일이 있습니까? – zeboidlund

관련 문제