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

124

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

Hemant
источник
Думаю, вы уже знаете, почему он генерируется. в противном случае он создается, потому что ваш проект предоставляет своего рода веб-сервис. он всегда генерируется либо во время компиляции, либо во время выполнения. во время выполнения он генерируется в папке Temp со случайным именем
AaA

Ответы:

101

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

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

Grzenio
источник
21
Если он сгенерирован, когда для проекта установлено значение «Авто», значит ли это, что он необходим? что произойдет, если вы не развернете X.XMLSerializers.dll вместе с приложением, будет ли он сгенерирован на лету?
Рори
3
Так как же выполнить предварительную загрузку этих сборок?
Carlo
1
@ Рори, я знаю, что это старый вопрос, но похоже, что это так. Три из моих проектов были настроены Auto, но только один создал DLL сериализации.
ps2goat
4
**Generate Serialization Assemblies** Specifies whether the compiler will use the XML Serializer Generator Tool (Sgen.exe) to create XML serialization assemblies. Serialization assemblies can improve the startup performance of XmlSerializer if you have used that class to serialize types in your code. By default, this option is set to Auto, which specifies that serialization assemblies be generated only if you have used XmlSerializer to encode types in your code to XML. msdn.microsoft.com/en-us/library/kb4wyys2.aspx
ps2goat
2
Изменение вручную VS2015: щелкните правой кнопкой мыши имя проекта -> Свойства -> Сборка -> (прокрутите вниз) Создать сборку сериализации.
Eido95
54

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

  1. В VS щелкните правой кнопкой мыши файл проекта и выберите "Свойства".
  2. Перейдите на вкладку "Сборка".
  3. Измените раскрывающийся список «Создать сериализацию сборки» с «Авто» на «Выкл.»
  4. Восстановите, и его не будет
jontsnz
источник
17
Да, но вопрос был в том, почему он генерируется!
Hemant
Я знаю, что это старый ответ, но в VS2015 Update 3 в приложении Winforms, нацеленном на .NET 2.0 x86 при компиляции в 64-битной системе Win10 Ent, тогда, даже если для параметра «Создать сборку сериализации» в раскрывающемся списке установлено значение «Выкл», а затем * .XmlSerializers. dll все еще создается. Мое приложение ссылается на веб-службу ASMX. Может, ошибка в VS2015 Update 3?
Питер
6

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

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

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

Алан Кристенсен
источник
5

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

См. Sgen.exe в MSDN

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

abhilash
источник
4

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

Малькольм
источник
1
Приложение My WinForms генерирует MyProject.XMLSerializers.dll при включении или автоматическом
включении