如果我已经创建了一个序列化程序集,为啥代码会编译一个序列化程序集?
Posted
技术标签:
【中文标题】如果我已经创建了一个序列化程序集,为啥代码会编译一个序列化程序集?【英文标题】:Why does the code compile a serialization assembly if I already created one?如果我已经创建了一个序列化程序集,为什么代码会编译一个序列化程序集? 【发布时间】:2012-06-29 09:43:09 【问题描述】:我的客户端代码调用了一个老式的 .asmx Web 服务。为了提高性能,我使用以下命令预先生成了序列化程序集,该命令在 bin/release 文件夹中运行:
for %%a in (*.dll) do sgen /assembly:%%a
它本质上是遍历所有 .dll 文件并在它们上调用sgen /assembly:foo.dll
。在此命令之后,每个程序集都有一个 foo.XmlSerializers.dll 程序集。
但是,当我分析代码时,我发现代码中仍然存在性能问题,并且它仍然编译序列化程序集(完全忽略我预先生成的程序集,由 ProcMon 验证)。
为什么它不使用我预先生成的序列化程序集?
【问题讨论】:
【参考方案1】:它尝试加载.XmlSerializers.dll
文件,但由于某种原因失败,而是重新生成它。可能是因为它与您的程序集不同步。
尝试将此添加到您的 app.config
文件中:
<configuration>
<system.diagnostics>
<switches>
<add name="XmlSerialization.PregenEventLog" value="1" />
</switches>
</system.diagnostics>
</configuration>
这将使生成器将遇到的错误打印到事件日志中。
更多信息:XmlSerializers, ModuleVersionId, ILMerge, and You - Bits in Motion (blog)
您可能也对这个 SO 问题感兴趣:Generating an Xml Serialization assembly as part of my build
【讨论】:
以上是关于如果我已经创建了一个序列化程序集,为啥代码会编译一个序列化程序集?的主要内容,如果未能解决你的问题,请参考以下文章