如果目标组件更改,则不使用XMLSerializer.dll



我正在为我的服务生成XMLSerialializer dll。这是一个很大的网络服务 - 构建大约需要2分钟。

为了减少构建时间,我将XMLSerializer的构建分为一个单独的makefile项目 - 鉴于界面没有变化,我认为我可以将其编译一次,这就是IT。

但是,我发现的,如果我重新编译服务,则不再使用XMLSerialializer,并且在运行时生成了序列化器代码。

有人看过吗?有工作吗?什么可能导致XMLSerializer不再匹配服务组件?

谢谢。

更新:

好吧,我找到了一半的答案...

https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlSerialializerVersionAttribute(v = vs.110).aspx

描述XMLSerializerVersionAttribute(在生成的.cs代码中)。

文档说...

如果基础架构找到带有匹配名称的程序集,则加载程序集并基础架构检查XMLSerializerVersionAttribute,以在发现的汇编版本与父母汇编的当前版本之间进行匹配。如果版本不匹配,则不使用找到的组件。相反,为序列化生成了临时组件。

在.NET框架源代码中查看parentAssemblyID实际上是模块版本ID,即

Assembly.GetExecutingAssembly().GetModules()[0].ModuleVersionId

但是,如果我手动加载XMLSerialializer组件,然后更改属性上的parentAssemblyID字段,它仍然不起作用 - 我猜该框架将加载其自己的Serialializer Assembly的副本。

我最终添加了一个后构建步骤以更改汇编的模块ID(在调试构建中)。

我尝试了fody.mvid(如下所述,can-i规定的themodule-version-id-mvid-当构建 - net-emembly时),但我无法让它上班(版本不匹配)。

最后,我在此博客文章中使用了代码-https://blogs.msdn.microsoft.com/johnls/2005/08/08/13/changing-mvids/

最新更新