ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-07-10 00:04:50  阅读:610  来源: 互联网

标签: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,这是这个问题的根源)

解决方法:

您可以在编译时生成程序集.在Visual Studio打开的项目属性中,单击“构建”选项卡并向下滚动到“生成序列化程序集”.

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

Generate serialization assembly

Specifies whether the compiler will use the XML Serializer Generator
Tool (Sgen.exe) to create XML serialization assemblies. Serialization
assemblies can improve the startup performance of XmlSerializer if you
have used that class to serialize types in your code. By default, this
option is set to Auto, which specifies that serialization assemblies
be generated only if you have used XmlSerializer to encode types in
your code to XML. Off specifies that serialization assemblies never be
generated, regardless of whether your code uses XmlSerializer. On
specifies that serialization assemblies always be generated.
Serialization assemblies are named TypeName.XmlSerializers.dll. For
more information, see 07001.

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

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

标签:c,net,xml-serialization,xmlserializer
来源: https://codeday.me/bug/20190709/1418447.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有