我的客户端代码调用了旧式的.asmx Web服务。为了提高性能,我使用以下命令预先生成了序列化程序集,该命令在bin / release文件夹中运行:
for %%a in (*.dll) do sgen /assembly:%%a
它基本上循环遍历所有.dll文件并在其上调用sgen /assembly:foo.dll
。在此命令之后,每个程序集都有一个foo.XmlSerializers.dll程序集。
然而,当我对代码进行分析时,我发现代码中仍然存在一个命中,它仍然编译一个序列化程序集(完全忽略我的预生成程序集,由ProcMon验证)。
为什么不使用我预先生成的序列化程序集?
答案 0 :(得分:0)
它尝试加载.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)
您可能也对此问题感兴趣:Generating an Xml Serialization assembly as part of my build