我想生成序列化程序集或.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,这是这个问题的根源)
答案 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
。