Обратная совместимость в .NET с BinaryFormatter

Когда вы запускаете свое приложение в процессе разработки, процесс сборки осуществляется с помощью веб-пакета / пакета / любого другого инструмента, который вы используете.

Эти инструменты позволяют вам (с помощью плагинов) делать что-то вроде импорта css в javascript, а затем, в конце концов, выплевывать его обратно как css. Это не нативная особенность JavaScript.

Jest работает на узле js, который не обладает всеми функциями веб-пакета и не может анализировать raw css и т. Д.

Итак, когда у вас была ошибка "SyntaxError: /Users/thiagofacchini/Documents/atomix/src/library/atoms/Label/styles.css: Support for the experimental syntax 'decorators-legacy' isn't currently enabled (2:1):"

, это на самом деле nodejs, пытающийся проанализировать CSS как javascript! Вы можете прочитать больше о том, что это было, хотя вы делали здесь https://www.sitepoint.com/javascript-decorators-what-they-are/

Так как вы управляете CSS в вашей среде jest?

в конфигурации jest вы настроили ее так, чтобы не импортировать css, а вместо этого импортировать пустой модуль.

сначала установите npm install-obj-proxy

, а затем добавьте следующее в свой jest.config.js

moduleNameMapper: {
    "\\.css$": "identity-obj-proxy",
    "^lodash-es$": "lodash"
},

9
задан Stefan Monov 27 August 2010 в 01:05
поделиться

3 ответа

Крутой. Я бы выгрузил двоичный файл и использовал сериализацию XML (более простую в управлении, терпимую к изменениям, которые не слишком экстремальны, например, добавление/удаление полей). В более крайних случаях проще написать преобразование (возможно, xslt) из одной версии в другую и сохранить классы в чистоте. Если требуется непрозрачность и небольшой размер диска, вы можете попытаться сжать данные перед записью на диск.

3
ответ дан 3 November 2019 в 07:11
поделиться

Это - действительно старый вопрос, но ему нужен актуальный ответ так или иначе; я знаю, что это отклоняется немного вне темы, так терпите меня. Сегодня, в 2019: Я предложил бы людям, которые, оказывается, читают это на этапе в Вашем проекте, где это довольно выполнимо для серьезного рассматривания использование Protobuf вместо BinaryFormatter. Это имеет большинство преимуществ двоичного формата (который это), но меньше из недостатки .

  • Это работает между различными языками и технологическими стеками легко (Java.NET, C++, Пойдите, Python)
  • , Это имеет хорошо продуманную стратегию обработки повреждающихся изменений (добавляющий/удаляющий поля, и т.д.) способом, который означает, что для "версии x " Вашего программного обеспечения намного легче обработать "версию y " - сгенерированные данные и наоборот . Да, это на самом деле верно: более старая версия Вашего приложения сможет обработать данные, сериализированные с более новой версией определения интерфейса Protobuf .proto. (Несуществующие поля будут просто проигнорированы при десериализации.)

    Для сравнения, при выполнении более новых версий кода и десериализации старых данных, "не - существующие" поля в данных будут установлены на свое определенное для типа значение по умолчанию. В этом смысле обработка старых данных не является "полностью автоматической" в этом смысле, но все еще намного более простой , пользуясь двоичными библиотеками сериализации по умолчанию, включенными с платформами как Java и.NET.

, Если Вы предпочитаете недвоичный формат, JSON часто является подходящим выбором. Для RPC и таких сценариев, Protobuf лучше, хотя и даже официально упоминается/подтверждается Microsoft в наше время: Введение в gRPC на Ядре ASP.NET . ( gRPC является технологическим стеком, созданным сверху Protobuf)

0
ответ дан 3 November 2019 в 07:11
поделиться

В нашем приложении возникла та же проблема с сохранением данных профиля пользователя (расположение столбцов сетки, настройки фильтра...).

В нашем случае проблема была в AssemblyVersion.

Для этой проблемы я создаю SerializationBinder, который считывает актуальную версию сборки сборки (все сборки получают новый номер версии при новом развертывании) с Assembly.GetExecutingAssembly().GetName().Version.

В переопределенном методе BindToType информация о типе создается с новой версией сборки.

Десериализация реализована «вручную», это означает

  • Десериализация через обычный BinaryFormatter
  • получение всех полей, которые должны быть десериализованы (аннотированы собственным атрибутом)
  • заполнение объекта данными из десериализованного объекта

Работает со всеми нашими данными начиная с трех или четырех релизов.

2
ответ дан 3 November 2019 в 07:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: