【发布时间】:2017-11-21 20:47:03
【问题描述】:
我正在为我的服务生成一个 xmlserializer dll。这是一个大型网络服务 - 构建大约需要 2 分钟。
为了减少构建时间,我将 xmlserializer 的构建分离到一个单独的 Makefile 项目中——鉴于接口没有改变,我想我可以编译一次,就可以了。
但是,我发现,如果我重新编译服务,xmlserializer 不再使用,并且序列化程序代码正在运行时生成。
有人看过吗?有解决办法吗?什么可能导致 xmlserializer 不再匹配服务程序集?
谢谢。
更新:
好的,我找到了一半的答案......
描述 XmlSerializerVersionAttribute(在生成的 .cs 代码中)。
文件说...
如果基础结构找到名称匹配的程序集,则加载该程序集并基础结构检查 XmlSerializerVersionAttribute 是否匹配找到的程序集版本和父程序集的当前版本。如果版本不匹配,则不使用找到的程序集。而是为序列化生成一个临时程序集。
查看.Net Framework源码可知ParentAssemblyId其实是模块版本id,即
Assembly.GetExecutingAssembly().GetModules()[0].ModuleVersionId
但是,如果我手动加载 xmlserializer 程序集,并更改属性上的 ParentAssemblyId 字段,它仍然不起作用 - 我猜框架会加载它自己的序列化程序程序集副本。
【问题讨论】:
标签: c# .net xmlserializer