In other cases, it was suggested to simply add a SerializationBinder, which removes the version from the assembly type. However, when using general collections of the type found in the signed assembly, this type is strictly versioned based on its assembly.
Here is what I found.
internal class WeaklyNamedAppDomainAssemblyBinder : SerializationBinder
{
public override Type BindToType(string assemblyName, string typeName)
{
ResolveEventHandler handler = new ResolveEventHandler(CurrentDomain_AssemblyResolve);
AppDomain.CurrentDomain.AssemblyResolve += handler;
Type returnedType;
try
{
AssemblyName asmName = new AssemblyName(assemblyName);
var assembly = Assembly.Load(asmName);
returnedType = assembly.GetType(typeName);
}
catch
{
returnedType = null;
}
finally
{
AppDomain.CurrentDomain.AssemblyResolve -= handler;
}
return returnedType;
}
Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
string truncatedAssemblyName = args.Name.Split(',')[0];
Assembly assembly = Assembly.Load(truncatedAssemblyName);
return assembly;
}
}
However, changing the binding process around the world seems pretty dangerous to me. Strange things can happen if serialization occurs in multiple threads. Perhaps the best solution is to manipulate some regular expression of type Name?
Edit: The row-based method does not work. Obviously generics require a full, strongly named type. Pretty disgusting if you ask me.