我有一个项目,它使用BinaryFormatter序列化与字符串和布尔结构的集合?数据类型。不同程序集版本的二进制反序列化
序列化/反序列化工作正常,但是如果我要改变这确实它失败,因为在表示二进制文件头的反序列化的工作,它需要的Assembly x
代替Assembly y
处理数据集。
是否有可能将序列化/反序列化设置为程序集不可知?
我有一个项目,它使用BinaryFormatter序列化与字符串和布尔结构的集合?数据类型。不同程序集版本的二进制反序列化
序列化/反序列化工作正常,但是如果我要改变这确实它失败,因为在表示二进制文件头的反序列化的工作,它需要的Assembly x
代替Assembly y
处理数据集。
是否有可能将序列化/反序列化设置为程序集不可知?
钩到AppDomain.OnAssemblyResolve事件和修复行动的程序集名称
private System.Reflection.Assembly OnAssemblyResolve(System.Object sender, System.ResolveEventArgs reArgs)
{
foreach(System.Reflection.Assembly assembly in System.AppDomain.CurrentDomain.GetAssemblies())
{
System.Reflection.AssemblyName assemblyName = assembly.GetName();
if(assemblyName.FullName == reArgs.Name)
{
return(assembly);
}
}
}
来源:http://osdir.com/ml/windows.devel.dotnet.clr/2003-12/msg00441.html
我原本打算使用这个,但是我可以看到有可能发生的并发执行失败的情况。 – 2009-02-03 23:00:32
的GAC是你的第一资源,允许不同版本的组件的共存侧逐侧。但是这并不能真正解决任何问题,除非你的应用程序也具有版本容忍度。二进制序列化有几个功能来处理版本容忍序列化。请阅读此MSDN library article。
感谢GAC的建议,但是我试图不要在应用程序中留下沉重的足迹,从它自己的文件夹运行。 – 2009-02-03 22:59:41
您可以更改BinaryFormatter属性AssemblyFormat以独立于程序集版本进行序列化。
// Example
var binFormat = new BinaryFormatter();
binFormat.AssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple;
我遇到同样的问题......很高兴知道它已被解决。 – mmr 2009-02-05 00:40:54