MyAssembly.XmlSerializers.dll产生了什么?


124

我正在一个生成装配的项目中。我只是注意到正在生成一个附加程序集* .XmlSerializers.dll。为什么会自动生成此文件及其用途?


我想您已经知道为什么会生成它。如果不是,则生成它是因为您的项目正在公开一种Web服务。它总是在编译时或运行时生成。在运行时,它是在Temp文件夹中生成的,其名称是随机的
AaA

Answers:


101

.NET实现中,XmlSerializer会生成一个临时程序集,用于对类进行序列化/反序列化(出于性能原因)。它既可以即时生成(但每次执行都需要时间),也可以在编译过程中预先生成并保存在您要的程序集中。

您可以更改项目选项这种行为(标签编译 - > 高级编译选项 - > 生成序列化组件自动分别)。项目文件中的对应元素是GenerateSerializationAssemblies,例如<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>


21
如果它是在项目设置为“自动”时生成的,是否意味着需要它?如果不将X.XMLSerializers.dll与应用程序一起部署,将会发生动态变化吗?
罗里

3
那么如何预加载这些程序集呢?
卡罗

1
@Rory,我知道这个问题很旧,但这似乎是事实。我的三个项目设置为Auto,但是只有一个创建了序列化DLL。
ps2goat

4
**Generate Serialization Assemblies** 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. msdn.microsoft.com/en-us/library/kb4wyys2.aspx
ps2goat 2015年

2
VS2015手动更改:右键单击项目名称-> 属性 -> 构建 ->(向下滚动)生成序列化程序集。
Eido95 '16

54

仅供参考。阻止XmlSerializers.dll自动生成的确切步骤是:

  1. 在VS中,右键单击您的项目文件,然后选择“属性”
  2. 点击“构建”标签
  3. 将“生成序列化程序集”下拉列表从“自动”更改为“关闭”
  4. 重建,它将消失

17
是的,但问题是为什么会生成它!
Hemant 2010年

我知道这是一个旧的响应,但是在Winforms应用程序上针对NET 2.0 x86的Winforms应用程序进行VS2015 Update 3时,如果是在Win10 Ent 64位系统上进行编译,则即使将“生成序列化程序集”的设置下拉为“关”,也可以使用* .XmlSerializers。 dll仍然生成。我的应用程序确实引用了ASMX Web服务。也许是VS2015 Update 3中的错误?
彼得

6

出于性能原因,我认为这是XML序列化器的JIT(及时)编译。

使用RegexOptions.Compiled选项打开RegEx实例,您会得到相同的结果。

我不是.NET CLR专家,对不起缺少精确的技术细节。


5

*.XmlSerializers.dll 使用Sgen.exe [XML序列化器生成器工具]生成

请参阅MSDN上的Sgen.exe

通常Sgen.exe在Project的Build Post事件中使用。查看您的项目是否有一个生成后事件,该事件会生成*.XmlSerializers.dll


4

该项目仅为Web应用程序生成project.XMLSerialisers.dll。对于其他应用程序,您必须单独运行sgen。


1
我的WinForms应用在设置为自动或自动设置时会生成MyProject.XMLSerializers.dll
凯文·德里格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.