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

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

5 ответов

Решение

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

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

FYI. Точные шаги, чтобы остановить автоматическую генерацию XmlSerializers.dll:

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

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

То же самое происходит с экземплярами RegEx, если включена опция RegexOptions.Compiled.

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

*.XmlSerializers.dll создаются с помощью Sgen.exe [XML Serializer Generator Tool]

Смотрите Sgen.exe на MSDN

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

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

Другие вопросы по тегам