BinaryFormatter ignore assembly version

I have the following method to generate a hash of an object. It works pretty good! But when I change the version of the assembly, the hash is changing even when the object is the same.

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));
}

How is it possible to ignore the assembly version?

Jon Skeet
people
quotationmark

BinaryFormatter.AssemblyFormat is documented as:

Gets or sets the behavior of the deserializer with regards to finding and loading assemblies.

There's no indication that it has an impact on the serializing path.

Personally I would avoid this method of hashing - it seems terribly fragile to me. Do you have no control over the object being hashed, or any way of hashing in a more stable way?

people

See more on this question at Stackoverflow