Для чего создан MyAssembly.XmlSerializers.dll?

Я работаю над проектом, который создает сборку. Я просто заметил, что создается дополнительная сборка *.XmlSerializers.dll. Почему этот файл сгенерирован автоматически и для чего он используется?

Ответ 1

В .NET XmlSerializer генерирует временную сборку для сериализации/десериализации ваших классов (по соображениям производительности). Он может генерироваться "на лету" (но он требует времени на каждом выполнении), или он может быть предварительно сгенерирован во время компиляции и сохранен в этой сборке, о которой вы просите.

Вы можете изменить это поведение в параметрах проекта (вкладка Компилировать → Параметры расширенной компиляции → Создать сборки сериализации, Авто или Вкл. соответственно). Соответствующим элементом в файле проекта является GenerateSerializationAssemblies, например <GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>.

Ответ 2

FYI. Точные шаги, чтобы остановить автоматическое создание XmlSerializers.dll:

  • В VS щелкните правой кнопкой мыши файл вашего проекта и выберите "Свойства"
  • Перейдите на вкладку "Создать"
  • Измените раскрывающееся меню "Сгенерировать сериализацию" с "Авто" на "Выкл."
  • Восстановить, и он исчезнет.

Ответ 3

Я думаю, что это JIT (Just in time) компиляция сериализаторов XML по причинам производительности.

Вы получаете то же самое с экземплярами RegEx, используя параметр RegexOptions.Compiled.

Я не эксперт .NET CLR, извините за отсутствие точных технических деталей.

Ответ 4

*.XmlSerializers.dll создаются с использованием Sgen.exe [XML Generator Tool]

Смотрите Sgen.exe в MSDN

Обычно Sgen.exe используется в событиях Post Build проектов. Посмотрите, есть ли в вашем проекте событие post build, которое генерирует *.XmlSerializers.dll

Ответ 5

Проект генерирует только проект .XMLSerialisers.dll для веб-приложений. Для других приложений вы должны запускать sgen отдельно.