本文讲述了开发者在开发过程中遇到的一个常见问题:因插件引用的DLL组件版本与系统版本不匹配,导致IIS重启后客户端报错。文中详细分析了问题原因,即新插件错误地引用了旧版本的DLL,覆盖了系统正确的DLL。解决方案是删除错误版本的引用,添加正确版本,并重新生成解决方案。最后,作者提供了查看BIN目录和VS工程中引用组件版本的方法,并感谢了团队老师的帮助。
有些开发者,在完成了挂插件,然后直接在对应的BIN目录生成了解决方案, 心满意足地重启IIS后,一打开客户端,就报错了 出现了 类似于 “未能加载文件或程序集“未能从程序集“Kingdee.BOS, Version=6.1.394.12, Culture=neutral, PublicKeyToken=null”中加载类型“Kingdee.BOS.CommonTransactionScope”的类似错误,有的跟我一样能看到客户端Client界面却加载不了 数据中心 及语言。 内心很困惑,又没有去改动BIN目录,却触发了这个问题。
首先,排查下IIS的应用程序次.Net FrameWork的版本,例如7.5版本的云星空对应的是v4.0,如下图
如果这里没问题。 是因为新插件引用的DLL组件版本,与云星空系统版本的DLL不一样。同一个DLL文件名在不同版本的内容很有可能是不一样的。例如(举例说明原理),Kingdee.BOS这个DLL组件,在Version=6.1.394.12 是没有 CommonTransactionScope,而在版本 7.5.1507.2是有的。假设开发者系统组件版本都是7.5.1507.2,然后新建了插件A 引用了Kingdee.BOS组件,不小心或者没留意到引用的是版本6.1.394.12,然后直接把插件生成在对应BIN目录,这时候会顺便把引用的组件复制到该BIN目录(理所当然是覆盖了正确的组件了)。聪明如你,应该猜到可能的解决方法是 把新组件的错误版本引用删除,然后添加正确版本的引用,重新生成一次解决方案到BIN目录。
下面说下常用操作,看BIN组件目录的版本,进入后找大部分kingdee.BOS开头的文件,右键点击属性,如下图
在VS工程中,查看引用组件版本
希望大家开开心心进行开发,不会再收着类似问题的困扰。
感谢团队了的HXDong老师跟CZJie老师协助解决这问题。
推荐阅读