我有一個項目,它使用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