2017-02-21 9 views
0

Cecil의 문자열 기반 스트림에서 어셈블리를로드하려고하는데, 계속 System.BadImageFormatException이 발생하고 잘못된 작업을 수행 할 수 없습니다.Mono.Cecil에서 스트림을 읽을 수 없습니다.

내가 노력하고있어 나는 또한 시도했다

return new MemoryStream(Encoding.UTF8.GetBytes(s ?? "")); 

:

var data = File.ReadAllText("/path/to/dll"); 
using(Stream s = StreamFromString(data)) { 
    var module = ModuleDefinition.ReadModule(s); 
} 

그리고 StreamFromString 것은으로 정의된다

MemoryStream stream = new MemoryStream(); 
StreamWriter writer = new StreamWriter(stream); 
writer.Write(s); 
writer.Flush(); 
stream.Position = 0; 
return stream; 

사용하여 최신 세실, .NET 4.5 Windows Server 2012에 어떤 아이디어가 있습니까? 감사합니다 :)

편집 : ModuleDefinition.ReadModule("/path/to/dll") 잘 작동하므로 손상된 DLL 문제가 아닙니다.

+1

바이너리 파일을 텍스트 파일처럼 읽으려고합니다. 그러지 마. 그냥'FileStream'을 사용하십시오. 어셈블리는 문자열이 아닙니다. – Luaan

+0

당신이 실제로하려고하는 것은 무엇입니까? 왜'ModuleDefinition.ReadModule ("/ path/to/dll")이 너에게 좋은가요? 또는 아마도'using (var s = File.OpenRead ("/ path/to/dll")) {var module = ModuleDefinition.ReadModule (s); }'? – svick

+0

@Luaan DLL을 데이터베이스에 문자열로 저장 한 다음 나중에 파일을 쓰지 않고도 읽고 해석 할 수있는 방법을 찾아야합니다. 파일 스트림을 사용할 수 없습니다. –

답변

0

정확히 작동하지 않는 이유는 무엇입니까?하지만 File.ReadAllBytes을 사용하여 바이트 배열을 읽고 MemoryStream을 직접 쓰지 않고 StreamWriter을 쓰면 해결 된 것으로 보입니다.