如何以编程方式生成序列化程序集或cs文件,就像XmlSerializer在使用XmlAttributeOverrides
本文关键字:就像 文件 XmlSerializer XmlAttributeOverrides cs 编程 方式生 程序集 序列化 | 更新日期: 2023-09-27 18:07:50
我想生成一个序列化程序集或.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。是否有另一种方法来生成或捕获XmlSerializer创建的.cs文件?
(我这里有一个相关的问题这是这个的根源)
可以在编译时生成程序集。在Visual Studio打开项目properties
中,单击build
选项卡并向下滚动到Generate serialization assemblies
。
将其设置为on
将在本地编译它们,以便它们可以与您的解决方案一起部署。它们也可以使用Sgen.exe
工具进行编译。更多信息请看这里
生成序列化程序集
指定编译器是否使用XML序列化生成器创建XML序列化程序集的工具(Sgen.exe)。序列化程序集可以提高XmlSerializer的启动性能在代码中使用该类序列化类型。默认情况下,选项设置为"自动",它指定序列化程序集只有在使用XmlSerializer对类型进行编码时才会生成将代码转换为XML。关闭指定序列化程序集永远不会无论您的代码是否使用XmlSerializer,都将生成。在指定始终生成序列化程序集。序列化程序集命名为TypeName.XmlSerializers.dll。为更多信息,请参见XML序列化生成器工具(Sgen.exe)。
从最后一条评论中我看到了你的问题。参考这个问题,我相信如果你使用XmlAttributeOverrides
程序集将始终生成。
因此,如果你不能启动csc.exe,那么不要使用XmlAttributeOverrides
。