Для чего создается MyAssembly.XmlSerializers.dll? - PullRequest
119 голосов
/ 01 июня 2009

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

Ответы [ 5 ]

95 голосов
/ 01 июня 2009

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

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

54 голосов
/ 28 мая 2010

FYI. Точные шаги для остановки автоматической генерации XmlSerializers.dll:

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

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

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

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

5 голосов
/ 01 июня 2009

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

См. Sgen.exe на MSDN

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

4 голосов
/ 28 марта 2012

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

...