SGEN XMLSerializer - 应该添加.XMLSerializers.dll作为对当前项目或GAC的引用吗?

时间:2010-03-30 08:04:15

标签: c# xml-serialization sgen

我使用XMLSerializer类做一些事情。像大多数初学者一样,我在app start上面临性能问题。我阅读了很多博客,文章,最后使用了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 个答案:

答案 0 :(得分:9)

如果不对sgen.exe使用/ type参数,那么它将为程序集中的所有公共类型生成de / serialization代码。请注意,[Serializable]属性不用于XML序列化。我怀疑你是否想要这个,使用/ type来保持生成的组件小。

无需添加引用,Xml序列化总是尝试在.XmlSerializers.dll程序集上使用Assembly.Load()。另外,您永远不会在代码中直接引用生成的XmlSerializationWriterXxx和XmlSerializationReaderXxx类。它确实有一个优点,当您在解决方案中包含项目时,构建系统将自动复制程序集。

在不同的应用程序序列化和反序列化XML文件时,只能考虑在GAC中安装它。您也可以通过手动复制程序集为其他应用程序提供.XmlSerializers.dll程序集。哪个有点容易出错,请在此处使用您自己的判断。检查上一段是否有自动复制的方法。