C# 无法读取Mono.Cecil中的流

C# 无法读取Mono.Cecil中的流,c#,mono.cecil,C#,Mono.cecil,我试图从Cecil中基于字符串的流加载程序集,但是我不断得到System.BadImageFormatException,我似乎无法找出我做错了什么 我正在尝试的是: var data = File.ReadAllText("/path/to/dll"); using(Stream s = StreamFromString(data)) { var module = ModuleDefinition.ReadModule(s); } 而StreamFromString定义为: retu

我试图从Cecil中基于字符串的流加载程序集,但是我不断得到
System.BadImageFormatException
,我似乎无法找出我做错了什么

我正在尝试的是:

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;
在Windows Server 2012上使用最新的Cecil.NET 4.5。有什么想法吗?谢谢:)


编辑:
ModuleDefinition.ReadModule(“/path/to/dll”)
工作正常,因此它不是一个损坏的dll问题。

我不确定它工作的确切原因-但是使用
文件读取字节数组。ReadAllBytes
并直接写入
内存流,而不使用
StreamWriter
似乎已经解决了这个问题。

您试图读取二进制文件,就像读取文本一样文件不要那样做。只需使用
文件流
。程序集不是字符串。您实际要做的是什么?为什么
ModuleDefinition.ReadModule(“/path/to/dll”)
对您来说不够好?或者可能
使用(var s=File.OpenRead(“/path/to/dll”){var ModuleDefinition.ReadModule(s);}
?@Luaan我需要找到一种方法,将dll作为字符串存储在数据库中,然后在不尝试写入任何文件的情况下读取和分析它们。无法使用filestream。@在不支持直接读取或写入文件的环境中,我需要分析作为字符串存储在数据库中的一组DLL。为什么是字符串?数据库通常比字符串更容易处理二进制blob。