在使用XmlAttributeOverrides时,如何以编程方式生成序列化程序集或cs文件,如XmlSerializer?

时间:2011-09-08 00:20:33

标签: c# .net xml-serialization xmlserializer

我想生成序列化程序集或.cs文件以使用XmlAttributeOverrides序列化我的类型,然后直接在我的项目中引用此程序集/ .cs文件,而不是使用XmlSerializer来执行xml序列化/反序列化。这是因为序列化使用XmlAttributeOverrides,当您使用覆盖创建XmlSerializer时,它不会查找现有程序集,但会始终重新生成一个(reference)。我的程序在无法运行csc.exe的环境中运行,因此我无法在运行时生成序列化程序集。

要清楚,我不能只使用sgen.exe,因为它只生成执行默认xml序列化/反序列化的程序集。如果你创建一个XmlSerializer和pass it XmlAttributeOverrides in the constructor然后Serialize()和Deserialize()不使用sgen.exe生成的程序集,因此sgen.exe似乎对我没用。使用覆盖时,XmlSerializer将始终生成新的程序集。

那么,有没有办法可以调用XmlSerializer或其他类并让它创建一个.cs文件或dll,我可以包含在我的项目中?如果可能的话,我想自动执行此过程,因此每当我更改正在序列化的类型时,我都不需要手动更改。我不能使用sgen.exe / k,因为它只生成一个类型的默认XmlSerializer而不是我需要使用覆盖的类型。是否有另一种方法来生成或捕获由XmlSerializer创建的.cs文件?

(我有一个相关的问题here,这是这个问题的根源)

1 个答案:

答案 0 :(得分:1)

您可以在编译时生成程序集。在Visual Studio打开的项目properties中,单击build选项卡,然后向下滚动到Generate serialization assemblies

将此设置为on将在本地编译它们,以便它们可以与您的解决方案一起部署。它们也可以使用Sgen.exe工具进行编译。有关详细信息,请参阅here

  

生成序列化程序集

     

指定编译器是否将使用XML Serializer Generator   工具(Sgen.exe)创建XML序列化程序集。序列化   如果你的话,程序集可以提高XmlSerializer的启动性能   使用该类来序列化代码中的类型。默认情况下,这个   选项设置为“自动”,指定序列化程序集   仅当您使用XmlSerializer对其中的类型进行编码时才会生成   您的代码到XML。 Off指定序列化程序集永远不会   生成,无论您的代码是否使用XmlSerializer。上   指定始终生成序列化程序集。   序列化程序集名为TypeName.XmlSerializers.dll。对于   更多信息,请参阅XML Serializer Generator Tool (Sgen.exe)

从上次评论中我看到了您的问题。请参阅此question,我相信如果您始终使用XmlAttributeOverrides程序集生成。

因此,如果您无法启动csc.exe,请不要使用XmlAttributeOverrides