【问题标题】:What is MyAssembly.XmlSerializers.dll generated for?MyAssembly.XmlSerializers.dll 是为了什么而生成的?
【发布时间】:2010-10-30 09:11:44
【问题描述】:

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

【问题讨论】:

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

标签: c# visual-studio-2008 xml-serialization


【解决方案1】:

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

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

我不是 .NET CLR 专家,抱歉缺乏准确的技术细节。

【讨论】:

    【解决方案2】:

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

    Sgen.exe on MSDN

    通常Sgen.exe 用于项目的构建后事件。查看您的项目是否有生成 *.XmlSerializers.dll

    的构建后事件

    【讨论】:

      【解决方案3】:

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

      您可以在项目选项中更改此行为(选项卡 编译 -> 高级编译选项 -> 生成序列化程序集自动 开启)。项目文件中对应的元素为GenerateSerializationAssemblies,例如<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>

      【讨论】:

      • 如果项目设置为Auto时生成,是不是就需要它?如果您不使用应用程序部署 X.XMLSerializers.dll 会发生什么情况,它会即时生成吗?
      • 那么如何预加载这些程序集呢?
      • @Rory,我知道这个问题很老,但似乎是这样。我的三个项目设置为Auto,但只有一个创建了序列化 DLL。
      • **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
      • VS2015手动改:项目名称右键->Properties->Build->(向下滚动)生成序列化程序集。
      【解决方案4】:

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

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

      【讨论】:

      • 是的,但问题是为什么会生成它!
      • 我知道这是一个旧响应,但是在针对 .NET 2.0 x86 的 Winforms 应用程序上的 VS2015 Update 3 中,当在 Win10 Ent 64 位系统上编译时,即使将“生成序列化程序集”下拉菜单设置为“ Off”,那么 *.XmlSerializers.dll 仍然会生成。我的应用确实引用了 ASMX Web 服务。可能是 VS2015 Update 3 中的错误?
      【解决方案5】:

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

      【讨论】:

      • 我的 WinForms 应用程序在设置为 on 或 auto 时生成 MyProject.XMLSerializers.dll
      猜你喜欢
      • 2016-12-10
      • 2010-09-15
      • 1970-01-01
      • 2018-03-20
      • 2010-10-27
      • 2023-01-26
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      相关资源
      最近更新 更多