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

8

我正在使用XMLSerializer类进行一些操作。像大多数初学者一样,我在应用程序启动时遇到了性能问题。我阅读了很多博客、文章,最终使用了SGEN工具。现在性能看起来还不错,但有几件事情对我来说仍然不太清楚。

1)我应该像这样使用SGEN语法吗:

SGen.exe /assembly:MyAssembly /type:MyRootXmlType

或者只需这样做(我目前使用这种语法,我的程序集中只有一个可序列化的类):

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个回答

10
如果您不使用 sgen.exe 的 /type 参数,则它会为程序集中的 所有 公共类型生成序列化代码。请注意,[Serializable] 特性不用于 XML 序列化。我怀疑您不希望这样做,使用 /type 可以使生成的程序集更小。
添加引用是不必要的,因为 XML 序列化总是尝试在 .XmlSerializers.dll 程序集上进行 Assembly.Load()。此外,您永远不会直接在代码中引用生成的 XmlSerializationWriterXxx 和 XmlSerializationReaderXxx 类。它确实有一个优点,当您将项目包含在解决方案中时,构建系统将自动复制该程序集。
只有当不同的应用程序对 XML 文件进行序列化和反序列化时,才考虑将其安装在 GAC 中。您还可以通过手动复制程序集来向其他应用程序提供 .XmlSerializers.dll 程序集。这有些容易出错,请在此方面自行判断。请查看前一段以了解如何自动复制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接