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

我用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一起部署就足够了,还是应该在我的代码中添加一些东西?

我不这么认为,但我想确保我不必更改我的代码,并且“魔法”会自动发生。

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

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

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