Подтвердить что ты не робот

Двойная десериализация с другой версией сборки

У меня есть проект, который использует BinaryFormatter для сериализации коллекции структур со строкой и bool? типы данных.

Сериализация/десериализация работает отлично, однако, если я должен был сменить сборку, которая не позволяет выполнить работу, из-за заголовка в двоичном файле, указывающего, что для обработки данных требуется Assembly x вместо Assembly y.

Можно ли настроить сериализацию/десериализацию как агностическую сборку?

4b9b3361

Ответ 1

Вы можете управлять тем, как бинарный форматтер разрешает свои типы, назначая пользовательский SerializationBinder для форматирования. Таким образом, вам не нужно возиться с событиями разрешения AppDomain, и вы устраняете риск неожиданных побочных эффектов от этого.

Подробный пример приведен в MSDN.

Ответ 2

Вы можете изменить свойство BinaryFormatter AssemblyFormat, чтобы сделать сериализацию независимой от версии сборки.

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

Ответ 3

Подключиться к событию 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

Ответ 4

Существуют альтернативные (двоичные) механизмы сериализации (как это), которые не зависят от сборки.

Ответ 5

GAC - ваш первый ресурс, позволяющий различным версиям сборки сосуществовать бок о бок. Но это действительно ничего не решает, если ваше приложение также не поддерживает версию. Двоичная сериализация имеет несколько функций для обработки толерантной сериализации версий. Читайте об этом в этой статье MSDN статьи в библиотеке.