Я пытаюсь загрузить сборку из потокового потока в Сесиле, однако я продолжаю получать 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")
отлично работает, поэтому это не проблема с коррупцией.
Вы пытаетесь прочитать двоичный файл, как если бы это был текстовый файл. Не делай этого. Просто используйте «FileStream». Ассембли не являются строками. – Luaan
Что вы на самом деле пытаетесь сделать? Почему не 'ModuleDefinition.ReadModule ("/path/to/dll ")' достаточно хорошо для вас? Или, может быть, 'using (var s = File.OpenRead ("/path/to/dll ")) {var module = ModuleDefinition.ReadModule (s); } '? – svick
@ Luaan Мне нужно выяснить способ хранения DLL как строки в базе данных, а затем прочитать и проанализировать их, не пытаясь писать в любой файл. Невозможно использовать фильтр. –