Как программно сгенерировать сборку сериализации или CS-файл, как XmlSerializer при использовании XmlAttributeOverrides? - PullRequest
4 голосов
/ 08 сентября 2011

Я хочу сгенерировать сборку сериализации или файл .cs для сериализации моих типов с помощью XmlAttributeOverrides, а затем напрямую обратиться к файлу сборки / .cs в моем проекте, а не использовать XmlSerializer для выполнения сериализации / десериализации xml.Это связано с тем, что в сериализации используется XmlAttributeOverrides, и при создании XmlSerializer с переопределениями он не ищет существующую сборку, а всегда создает ее заново ( ссылка ).Моя программа работает в среде, где невозможно запустить csc.exe, поэтому я не могу создать сборку сериализации во время выполнения.

Чтобы было ясно, я не могу просто использовать sgen.exe, потому что он генерирует только сборки, которые выполняют сериализацию / десериализацию по умолчанию xml.Если вы создаете XmlSerializer и передаете его XmlAttributeOverrides в конструкторе , тогда Serialize () и Deserialize () НЕ используют сборку, созданную sgen.exe, поэтому sgen.exe мне кажется бесполезным.При использовании переопределений XmlSerializer всегда будет генерировать новую сборку.

Итак, есть ли способ, которым я могу вызвать XmlSerializer или другие классы и получить его для создания файла .cs или DLL, которые я могу включить в свой проект?Я хотел бы автоматизировать этот процесс, если это возможно, поэтому мне не нужно вносить ручные изменения всякий раз, когда я меняю сериализуемые типы.Я не могу использовать sgen.exe / k, потому что он генерирует XmlSerializer по умолчанию для типа вместо того, который мне нужен, который использует переопределения.Есть ли другой способ сгенерировать или перехватить файл .cs, созданный XmlSerializer?

(у меня есть связанный вопрос здесь , который является корнем этого)

1 Ответ

1 голос
/ 11 сентября 2011

Вы можете создавать сборки во время компиляции.В Visual Studio откройте проект properties, перейдите на вкладку build и прокрутите вниз до Generate serialization assemblies.

Установка этого параметра на on скомпилирует их локально, чтобы они могли быть развернуты с вашим решением.Их также можно скомпилировать с помощью инструмента Sgen.exe.См. здесь для получения дополнительной информации.

Создать сборку сериализации

Указывает, будет ли компилятор использовать инструмент генератора сериализатора XML (Sgen.exe) для создания сборок XML-сериализации.Сборки сериализации могут улучшить производительность при запуске XmlSerializer, если вы использовали этот класс для сериализации типов в вашем коде.По умолчанию для этого параметра установлено значение «Авто», которое указывает, что сборки сериализации будут создаваться только в том случае, если вы использовали XmlSerializer для кодирования типов в своем коде в XML.Off указывает, что сборки сериализации никогда не создаются, независимо от того, использует ли ваш код XmlSerializer.On указывает, что сборки сериализации всегда генерируются.Сборки сериализации называются TypeName.XmlSerializers.dll.Для получения дополнительной информации см. Генератор XML-сериализатора (Sgen.exe) .

Из последнего комментария я вижу вашу проблему.Обратитесь к этому вопросу , я полагаю, что если вы используете XmlAttributeOverrides, сборка всегда будет генерироваться.

Следовательно, если вы не можете запустить csc.exe, не используйте XmlAttributeOverrides.

...