C# 生成MyAssembly.XmlSerializers.dll的目的是什么?

C# 生成MyAssembly.XmlSerializers.dll的目的是什么?,c#,visual-studio-2008,xml-serialization,C#,Visual Studio 2008,Xml Serialization,我正在进行一个生成程序集的项目。我刚刚注意到正在生成另外一个程序集*.XmlSerializers.dll。为什么这个文件是自动生成的,它的用途是什么?出于性能原因,我认为这是XML序列化程序的JIT(即时)编译 使用打开的RegexOptions.Compiled选项,可以获得与RegEx实例相同的结果 我不是.NET CLR专家,很抱歉缺少精确的技术细节。*.xmlserializer.dll是使用Sgen.exe[XML Serializer Generator Tool]生成的 看 通常

我正在进行一个生成程序集的项目。我刚刚注意到正在生成另外一个程序集*.XmlSerializers.dll。为什么这个文件是自动生成的,它的用途是什么?

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

使用打开的RegexOptions.Compiled选项,可以获得与RegEx实例相同的结果


我不是.NET CLR专家,很抱歉缺少精确的技术细节。

*.xmlserializer.dll
是使用Sgen.exe[XML Serializer Generator Tool]生成的

通常,
Sgen.exe
用于项目的生成后事件。查看您的项目是否具有生成
*.XmlSerializers.dll的生成后事件。在实现中,XmlSerializer生成用于序列化/反序列化类的临时程序集(出于性能原因)。它可以动态生成(但每次执行都需要时间),也可以在编译过程中预生成并保存在您询问的程序集中


您可以在项目选项中更改此行为(分别是“自动”或“打开”选项卡“编译->高级编译选项->生成序列化程序集”)。项目文件中相应的元素是GenerateSerializationAssembly,例如,
Auto

FYI。阻止自动生成XmlSerializers.dll的确切步骤如下:

  • 在VS中,右键单击项目文件并选择“属性”
  • 单击“构建”选项卡
  • 将“生成序列化程序集”下拉列表从“自动”更改为“关闭”
  • 重建,它就会消失

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

    是的,但问题是为什么会生成sgen!我知道这是一个旧的响应,但在Win10 Ent 64位系统上编译时,在Winforms应用程序(目标为.NET 2.0 x86)上的VS2015 Update 3中,即使将“生成序列化程序集”下拉设置为“关闭”,仍会生成*.xmlsializers.dll。我的应用程序确实引用了ASMX web服务。可能是VS2015更新3中的错误?如果它是在项目设置为“自动”时生成的,这是否意味着需要它?如果不将X.XMLSerializers.dll与应用程序一起部署,会发生什么情况?它会动态生成吗?那么如何预加载这些程序集呢?@Rory,我知道这个问题很老,但似乎是这样。我的三个项目被设置为
    Auto
    ,但只有一个项目创建了序列化DLL。
    **生成序列化程序集**指定编译器是否使用XML序列化程序生成器工具(Sgen.exe)创建XML序列化程序集。如果已使用XmlSerializer类序列化代码中的类型,则序列化程序集可以提高XmlSerializer的启动性能。默认情况下,此选项设置为“自动”,指定仅当您使用XmlSerializer将代码中的类型编码为XML时,才会生成序列化程序集。
    VS2015手动更改:右键单击项目名称->属性->构建->(向下滚动)生成序列化程序集。我想您已经知道生成序列化程序集的原因。如果不是,则生成它是因为您的项目公开了一种Web服务。它总是在编译时或运行时生成。在运行时,它在临时文件夹中以随机名称生成。启用或自动设置时,My WinForms app会生成MyProject.XMLSerializers.dll