Для чего создается MyAssembly.XmlSerializers.dll?
Я работаю над проектом, который генерирует сборку. Я только что заметил, что создается дополнительная сборка *.XmlSerializers.dll. Почему этот файл генерируется автоматически и для чего он используется?
5 ответов
В реализации .NET XmlSerializer создает временную сборку для сериализации / десериализации ваших классов (по соображениям производительности). Он может быть сгенерирован "на лету" (но это требует времени при каждом выполнении), или он может быть предварительно сгенерирован во время компиляции и сохранен в той сборке, о которой вы спрашиваете.
Вы можете изменить это поведение в настройках проекта (вкладка " Компиляция" -> " Дополнительные параметры компиляции" -> " Создать сборки сериализации", " Авто" или " Вкл" соответственно). Соответствующим элементом в файле проекта является GenerateSerializationAssemblies, например, <GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
,
FYI. Точные шаги, чтобы остановить автоматическую генерацию XmlSerializers.dll:
- В VS щелкните правой кнопкой мыши файл вашего проекта и выберите "Свойства"
- Перейдите на вкладку "Сборка"
- Измените раскрывающийся список "Создать сериализацию" с "Авто" на "Выкл."
- Перестройте, и оно исчезнет
Я думаю, что это 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 отдельно.