我有一个带有引用的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/

10-11 19:31