我有一个带有引用的dll的C#解决方案(还有具有相同.Net版本的C#)。当我构建解决方案并运行生成的exe而不合并exe和引用的dll时,一切正常。
现在,我想将这些合并为一个exe。我运行ILMerge,一切似乎正常。我尝试执行该exe,它似乎运行良好,直到尝试反序列化引用的dll中定义的对象为止。
using (Stream fstream = new FileStream(file_path, FileMode.Open))
{
BinaryFormatter bf = new BinaryFormatter();
return bf.Deserialize(fstream) as ControlledRuleCollection;
// throws unable to find assembly exception
}
我这里可能缺少一些ILMerge选项吗?
最佳答案
听起来您已经在DLL中序列化了一个对象,然后将所有程序集与ILMerge合并,现在正尝试反序列化该对象。这根本行不通。二进制序列化的反序列化过程将尝试从原始DLL加载对象的类型。该DLL在ILMerge之后不存在,因此反序列化将失败。
序列化和反序列化过程都需要在合并之前或之后进行操作。不能混在一起
关于c# - 在ILMerge之后BinaryFormatter.Deserialize “unable to find assembly”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5170333/