2013-08-08 2 views
2

다음 코드는 Windows에서 잘 작동하지만 Xamarin을 사용하고 iOS를 타겟팅 할 때 GetManifestResourceStream()은 null을 반환합니다.Assembly.GetManifestResourceStream이 iOS의 Xamarin과 작동하지 않습니다.

Assembly assembly = Assembly.GetExecutingAssembly(); 
Stream stream = assembly.GetManifestResourceStream("CommunicationModel.XmlSchemas.DeviceCommon.xsd"); 

'DeviceCommon.xsd'파일을 포함 리소스로 설정했습니다. 유효한 스트림을 반환하지 않는 이유를 잘 모릅니다.

Xamarin을 사용하여 iOS에서 작동하지 않는 이유를 알고있는 사람이 있습니까?

UPDATE :

좋아, 내가 코멘트에 조언을 따라 컨텐츠로 파일을 설정합니다.

지금 파일을 검색 할 수 있지만 열 수 없습니다 :

if (File.Exists("DeviceCommon.xsd")) 
{ 
    try 
    { 
    myStream = new FileStream("DeviceCommon.xsd", FileMode.Open); 
    } 
.... 
} 

나는 위의 코드는 'File.Exists() 호출 작동하지만를 실행하면 나는, I을 열려고 할 때 다음 예외가 발생합니다.

Access to the path "/private/var/mobile/Applications/8BD48D1F-F8E8-4A80-A446-F807C6728805/UpnpUI_iOS.app/DeviceCommon.xsd" is denied. 

아무도 내가이 문제를 해결할 수있는 방법이 있습니까 ???

덕분에, 커티스

+0

TBH는 예상대로 작동하지 않습니다. –

+1

나는 일반적으로 내 프로젝트에 콘텐츠로 파일을 포함합니다. 모든 것이 리소스 파일을 포함하고있는 단일 번들에 패키지되어 있기 때문에 큰 문제는 아닙니다. – Jason

+1

이 작동합니다 - 내 생각 엔 파일이 어셈블리에 올바르게 포함되지 않은 것입니다. 어떤 이유로 든. 최종 어셈블리에서 Reflector를 사용하여 리소스가 있는지 (이름이 무엇인지) 확인할 수 있습니다. –

답변

2

좋아, 나는 마침내 일을 얻었다. 제 경우에는 Windows .dll과 Xamarin.iOS.dll에 동일한 파일을 사용하고있었습니다. 네임 스페이스가 같았지만 .dll 프로젝트의 이름을 다르게 지정했습니다. 불행히도, Microsoft 설명서는 파일 이름의 일부로 네임 스페이스를 사용한다고 말합니다. 그건 사실이 아니야. .dll 이름을 네임 스페이스의 일부로 사용합니다. 약간의 차이는 있지만 모든 차이를 만듭니다.

그래서, 필자는 파일 속성을 'Embedded Resource'및 'Do not copy'로 설정했습니다. 필자가 처리해야하는 리소스는 .xsd 확장자를 가진 모든 파일이므로 모든 리소스 이름을 반복하고 .xsd로 끝난 리소스를 사용했습니다. 이 방법은 그들이 어떤 프로그래밍 방식을 사용하던간에 프로그램 방식으로 검색하고 하드 코딩하지 않았기 때문에 이름이 맞을 것입니다 :

 Assembly assembly = Assembly.GetExecutingAssembly(); 
     string[] resources = assembly.GetManifestResourceNames(); 
     foreach (string resource in resources) 
     { 
      if(resource.EndsWith(".xsd")) 
      { 
       Stream stream = assembly.GetManifestResourceStream(resource); 
       if (stream != null) 
       { 
        XmlSchema schema = XmlSchema.Read(stream, null); 
        _schemas.Add(schema); 
       } 
      } 
     } 
관련 문제