2017-02-21 14 views
0

Я пытаюсь загрузить сборку из потокового потока в Сесиле, однако я продолжаю получать System.BadImageFormatException, и я не могу понять, что я делаю неправильно.Невозможно прочитать из потока в Mono.Cecil

То, что я пытаюсь:

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

StreamFromString И определяется как:

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

Я также попытался:

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

Используя новейшие Cecil, .NET 4.5 на Windows Server 2012. Есть идеи? Спасибо :)

Редактировать: ModuleDefinition.ReadModule("/path/to/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, похоже, решили.