.net2.0项目发布失败未能加载文件或程序集BLL.XmlSerializers

作者:zarte    发布时间: 2020-07-08

netc#XmlSerializersVisual Studio

## 问题 发布时具体提示 未能加载文件或程序集“xx.BLL.XmlSerializers”或它的某一个依赖项生成此程序集的运行时比当前加载的运行时新,无法加载此程序集。 查看编译时的输出可以找到如下异常 ``` 以下程序集包含对高于目标版本的 .NET Framework 版本的依赖项,在运行时可能无法正确加载并会导致错误: xx.BLL.XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null。 依赖项为: System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089; mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089; System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089。 您应确保依赖程序集对应于目标框架,或确保您针对的目标框架为依赖程序集的目标框架 ``` 可以发现依赖库是4.0的!这是为什么呢?项目已经设置成2.0的。 ## 关于BLL.XmlSerializers 在.net实现时,XmlSeriizer生成用于序列化/反序列化类的临时程序集(出于性能原因)。它可以是动态生成的(但每次执行都需要时间),也可以在编译期间预生成,并保存在您正在询问的这个程序集中。 从ms上可以看到相关说明 ``` 不使用 XML 序列化程序生成器时,XmlSerializer 在应用程序每次运行时为每个类型生成序列化代码和一个序列化程序集。 若要改进 XML 序列化的启动性能,请预先使用 Sgen.exe 工具生成那些程序集。 然后可以使用应用程序部署这些程序集。 XML 序列化程序生成器还可以改进使用 XML Web services 代理与服务器通信的客户端的性能,因为在第一次加载类型时, 序列化进程将不会导致性能受损。 这些生成的程序集无法在 Web 服务的服务器端使用。 该工具仅能用于 Web 服务客户端和手动序列化方案。 如果包含要序列化的类型的程序集名为 MyType.dll,则关联的序列化程序集的名称将为 MyType.XmlSerializers.dll。 ``` ## 解决方案 由于之前使用旧版vs就没有出现这个问题,因此猜测是sgen.exe的问题。那使用旧版的手动生成应该就可以了。 sgen.exe xxx.dll //这样就会自动生成了 然后在项目--属性(启动项)--生成 里把生成序列化程序集改为关闭即可。 需要sgen.exe程序请在评论中留言!

上一篇:  elasticsearch教程(一)——docker方式安装

下一篇:  php strtotime 不同版本1900年部分地区返回不同值

加载更多