[]
开发服务端命令或中间件时,引人了第三方包,开发和编译时都没有问题,但是在执行这个服务端命令时,会报以下错误:
Could not load file or assembly 'RestSharp, Version=110.1.0.0, Culture=neutral, PublicKeyToken=598062e77f915f75'. Could not find or load a specific file. (0x80131621)
出现这个错误,通常是因为第三方库中使用 DLL 文件在活字格服务器中也被使用了,而活字格服务器使用的DLL版本却低于类库中引用的版本。例如问题描述中的例子,是加载 RestSharp.dll 失败了。
可以打开活字格的 bin 目录找到 RestSharp.dll 文件。
通过查看文件属性,可以查看活字格中引用的 DLL 的版本。
根据异常信息可以知道,第三方类库尝试加载 RestSharp.dll 的版本号为 110.1.0.0,活字格引用的版本号是 106.15.0.0,而.NET框架的策略是:如果主进程(活字格)依赖的版本高,插件依赖的版本低,是可以正确加载的。反之,则会加载失败。
1.首先从NuGet里删除RestSharp包。
2.通过添加引用直接引用活字格中的对应的Assembly文件。
3.选择“添加项目引用”。
4.单击“浏览”。
5.找到活字格的安装目录,找到对应的DLL文件,单击“添加”。
6.添加后即可在程序集中找到RestSharp引用。重新编译解决方案即可。
有些时候,无法直接通过添加活字格安装目录的DLL来解决问题,可能是因为这个DLL是用过第三方类库间接引用的,这种情况的话方法一就不能解决问题。
此时可以通过降低第三方类库的版本,确保插件依赖的版本号低于活字格依赖的版本号,例如,InfluxDB.Clent.Core 最新版依赖的RestSharp的版本是110.1.0.0 会导致这个问题,只需要安装一个较低版本的InfluxDB.Clent.Core,查看它依赖的RestSharp版本低于 106.15.0.0 即可。
通过查看InfluxDB.Clent.Core可以发现 3.3.0 版本依赖的 RestSharp 版本为 106.12.0.0,低于106.15.0.0。 所以安装InfluxDB.Clent.Core的3.3.3版本就可以解决问题了。