Изменить имя сборки во время двоичной сериализации - PullRequest
2 голосов
/ 08 февраля 2011

Позвольте мне кратко объяснить мою архитектуру, прежде чем я задам свой вопрос.У меня есть клиентское приложение, которое вызывает веб-сервис и передает ему пару элементов данных.Веб-служба использует эти данные для выполнения некоторых поисков, а затем возвращает двоичный сериализованный объект, используя BinaryFormatter, в качестве байтового массива для клиента.Затем клиент десериализует объект и использует его.Моя проблема в том, что мне пришлось переименовать сборку, которую сервер использует для новой версии.Это вызвало проблему при десериализации в клиенте.Я не могу развернуть новый клиент только для того, чтобы можно было использовать новое имя сборки, поэтому у меня вопрос, есть ли способ изменить имя сборки, которое записывается во время сериализации.Я знаю, как использовать SerializationBinder для десериализации, но это не решает мою проблему, поскольку для этого потребуется развертывание нового клиента.

В настоящее время я использую C # 2.0 как для приложения win form, так и для веб-службы.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2016

Вы можете воссоздать пустую сборку со старым именем, содержащую только AssemblyInfo.cs, куда вы помещаете редирект типа: [assembly: TypeForwardedTo (typeof (MyClassName))], для каждого типа, который перемещается в другую сборку. Ofc эта сборка должна ссылаться на новую.

Но, как правило, рекомендуется не использовать двоичную сериализацию для сложных структур данных, поскольку она не подходит для таких изменений, как перемещение типов между сборками.

0 голосов
/ 09 февраля 2011

Если бы я использовал .NET 4, решение от Томаса было бы идеальным. Однако .NET 2.0 не предоставляет эту функциональность. Вместо этого я просто переименовал dlls обратно в то, чем они были. Я хотел бы в конечном итоге переименовать библиотеки DLL, но на данный момент я не нашел жизнеспособного решения, где бы мне не пришлось развертывать что-либо на клиенте.

...