SGEN XMLSerializer - нужно ли добавлять .XMLSerializers.dll в качестве ссылки на текущий проект или GAC? - PullRequest
7 голосов
/ 30 марта 2010

Я делаю кое-что с классом XMLSerializer. Как и большинство начинающих, я сталкиваюсь с проблемой производительности при запуске приложения. Я читаю много блогов, статей и, наконец, использую инструмент SGEN. Сейчас производительность выглядит неплохо, но кое-что для меня все еще не ясно.

1) Должен ли я использовать синтаксис SGEN следующим образом:

SGen.exe /assembly:MyAssembly /type:MyRootXmlType

или достаточно просто (сейчас я использую этот синтаксис, в моей сборке только один класс Serializable):

SGen.exe /assembly:MyAssembly

Когда параметр / type может быть полезен на практике?

2) Я читаю в MSDN (http://msdn.microsoft.com/en-us/library/ee704594.aspx)

Эта команда генерирует сериализатор сборка MyAssembly.XmlSerializers.dll, который следует добавить в качестве ссылки на текущий проект или в GAC.

но во всех других блогах и статьях (например, в SO) я прочитал, что этого достаточно, чтобы просто поместить MyAssembly.XmlSerializers.dll в папку, где существует MyAssembly.

Так что же правильно?

3) Достаточно просто сгенерировать .XmlSerilizers.dll и развернуть его вместе с MyAssembly или я должен еще что-то добавить в свой код?

Я так не думаю, но хотел бы быть уверен, что мне не придется менять свой код, и "волшебство" происходит автоматически.

1 Ответ

9 голосов
/ 30 марта 2010

Если вы не используете аргумент / type для sgen.exe, он сгенерирует код de / serialization для всех открытых типов в сборке. Обратите внимание, что атрибут [Serializable] не используется в сериализации XML. Я сомневаюсь, что вы захотите этого, используйте / type, чтобы сгенерированная сборка была маленькой.

Добавление ссылки необязательно, сериализация Xml всегда в любом случае пытается использовать Assembly.Load () для сборки .XmlSerializers.dll Кроме того, вы никогда не будете ссылаться на сгенерированные классы XmlSerializationWriterXxx и XmlSerializationReaderXxx непосредственно в своем коде. У него есть одно преимущество: система сборки автоматически скопирует сборку, когда вы включите проект в решение.

Установка его в GAC стоит учитывать только тогда, когда различные приложения сериализуют и десериализуют файл XML. Вы можете предоставить другим приложениям сборку .XmlSerializers.dll, также скопировав сборку вручную. Что немного подвержено ошибкам, используйте здесь свое собственное мнение. Проверьте предыдущий абзац на способ автоматизации копирования.

...