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

Ror*_*ory 5 .net c# xml-serialization xmlserializer

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

需要明确的是,我不能只使用 sgen.exe,因为它只会生成执行默认 xml 序列化/反序列化的程序集。如果您创建一个 XmlSerializer 并在构造函数中传递它 XmlAttributeOverrides则 Serialize() 和 Deserialize() 不使用由 sgen.exe 生成的程序集,因此 sgen.exe 对我来说似乎没有用。使用覆盖时 XmlSerializer 将始终生成新程序集。

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

(我在这里有一个相关的问题这是这个问题的根源)

The*_*ing 1

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

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

生成序列化程序集

指定编译器是否将使用 XML 序列化程序生成器工具 (Sgen.exe) 创建 XML 序列化程序集。如果您已使用 XmlSerializer 类来序列化代码中的类型,则序列化程序集可以提高该类的启动性能。默认情况下,此选项设置为“自动”,它指定仅当您使用 XmlSerializer 将代码中的类型编码为 XML 时才生成序列化程序集。Off 指定永远不会生成序列化程序集,无论您的代码是否使用 XmlSerializer。On 指定始终生成序列化程序集。序列化程序集被命名为 TypeName.XmlSerializers.dll。有关详细信息,请参阅XML 序列化程序生成器工具 (Sgen.exe)

从最后的评论我看到了你的问题。参考这个问题,我相信如果你使用XmlAttributeOverrides程序集总会生成。

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