Я работаю над проектом, который создает сборку. Я просто заметил, что создается дополнительная сборка *.XmlSerializers.dll. Почему этот файл сгенерирован автоматически и для чего он используется?
Для чего создан MyAssembly.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 отдельно.