【发布时间】:2013-10-10 07:45:39
【问题描述】:
我有以下方法来生成对象的哈希。它工作得很好!但是当我更改程序集的版本时,即使对象相同,哈希也会发生变化。
public static string GetHash(Object item)
{
MemoryStream memoryStream = new MemoryStream();
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(memoryStream, item);
binaryFormatter.AssemblyFormat = FormatterAssemblyStyle.Simple;
HashAlgorithm hashAlgorithm = new MD5CryptoServiceProvider();
memoryStream.Seek(0, SeekOrigin.Begin);
return Convert.ToBase64String(hashAlgorithm.ComputeHash(memoryStream));
}
怎么可能忽略汇编版本?
【问题讨论】:
-
对象不相同。 .NET 中的类型不仅仅是命名空间和类型名称,它还包括它来自的程序集。其中包括 [AssemblyVersion]。强大的 DLL-Hell 对策。以及防止反序列化不再与更改的类匹配的数据的强大检查。您的哈希计算只是添加 另一个 检查数据是否已更改,可能是不必要的。不,您不能忽略程序集版本。
标签: c# serialization .net-assembly binaryformatter