Pergunta

Eu tenho um projeto que usa BinaryFormatter para serializar uma coleção de estruturas com corda e bool? tipos de dados.

A serialização / desserialização funciona bem, no entanto, se eu fosse para mudar o conjunto que faz o trabalho deixa de desserializar por causa do cabeçalho no arquivo binário indicando que ele requer Assembly x vez de Assembly y para lidar com os dados.

É possível configurar a serialização / desserialização ser montagem agnóstico?

Foi útil?

Solução

Você pode controlar como o formatador binário resolve seus tipos, atribuindo um SerializationBinder personalizado para o formatador. Desta forma, você não vai precisar mexer com eventos determinação da AppDomain e você eliminar o risco de efeitos colaterais inesperados a partir daí.

Há um exemplo detalhado em MSDN .

Outras dicas

Você pode mudar sua BinaryFormatter propriedade AssemblyFormat fazer serialização independente da versão do assembly.

// Example
var binFormat = new BinaryFormatter();
binFormat.AssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple;

ligar para o evento AppDomain.OnAssemblyResolve e fixar-se os nomes de montagem

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

Fonte: http://osdir.com/ ml / windows.devel.dotnet.clr / 2003-12 / msg00441.html

Existem altenative (binário) motores de serialização ( como este ) que aren 't assembly dependente.

O GAC é o seu primeiro recurso, permitindo que diferentes versões do side-by-the montagem para co-existir. Mas isso não resolve realmente nada a menos que seu aplicativo é a versão tolerante demais. serialização binária tem várias características para serialização alça versão tolerante. Leia mais sobre isso neste MSDN artigo biblioteca .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top