【发布时间】:2011-07-07 10:05:06
【问题描述】:
我有一个带有引用 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 选项吗?
【问题讨论】:
-
对象是从合并前的程序集还是合并后的程序集中序列化的?
-
我不想这么说,但我总是试图阻止人们使用 BinaryFormatter 的另一个原因。这种与类型元数据过于紧密的耦合会导致巨大的痛苦。如果您有兴趣在未来避免这种情况(以及许多其他痛苦情况),我可以推荐更好的选择。
-
你知道二进制序列化并不是一种存储格式,对吧?它只是一种临时传输格式,当通过二进制序列化程序完成时,对象的长期存储有太多限制。升级您的程序,告别旧文件。
-
点了。我根本没有考虑长期存储,但对于我正在编写的简单实用程序来说,它看起来非常简单。哦,好吧。
-
@Lasse 说得好;但我可以强调一下问题是 BinaryFormatter,而不是一般的“二进制序列化”。当然,很可能(咳)编写一个恰好产生二进制输出的行为良好的序列化程序。
标签: c# ilmerge binary-serialization