gpt4 book ai didi

c# - 如果目标程序集更改,则不使用 xmlserializer.dll

转载 作者:太空宇宙 更新时间:2023-11-03 14:58:46 25 4
gpt4 key购买 nike

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

为了减少构建时间,我将 xmlserializer 的构建分离到一个单独的 Makefile 项目中 - 假设接口(interface)没有改变,我想我可以编译一次,就这样了。

但是,我发现,如果我重新编译该服务,则不再使用 xmlserializer,而是在运行时生成序列化程序代码。

有人看过吗?有解决办法吗?什么可能导致 xmlserializer 不再匹配服务程序集?

谢谢。

更新:

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

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

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

文档说...

If the infrastructure finds an assembly with a matching name, the assembly is loaded and the infrastructure checks XmlSerializerVersionAttribute for a match between the found assembly's version and the current version of the parent assembly. If the version does not match, the found assembly is not used. Instead, a temporary assembly is generated for the serialization.

查看.Net Framework源码发现ParentAssemblyId其实就是模块版本id,即

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

但是,如果我手动加载 xmlserializer 程序集,并更改属性上的 ParentAssemblyId 字段,它仍然不起作用 - 我猜框架会加载它自己的序列化程序程序集副本。

最佳答案

我最终添加了一个构建后步骤来更改程序集的模块 ID(在调试构建中)。

我尝试了 fody.MVID(如此处描述 can-i-specify-the-module-version-id-mvid-when-building-a-net-assembly ),但我无法让它工作(版本不匹配)。

最后我使用了这篇博文中的代码 - https://blogs.msdn.microsoft.com/johnls/2005/08/13/changing-mvids/

关于c# - 如果目标程序集更改,则不使用 xmlserializer.dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47422417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com