本人本不是专门的.NET 开发,公司业务上有.NET SDK 的开发需求,于是鬼使神差地落到了我的头上,我们的 SDK 是以类库( DLL )的形式提供给客户的,最近遇到过一些问题,来问问大家有没有好的解决办法,百度一下好像关键字不太对,没找到我这里想要的。
因为我们的 SDK 依赖了.NET Json,就是那个 Newtonsoft,这个时候生成 DLL 后,会有两个 DLL:
SDK 的本体,
Newtonsoft.json.dll
但是客户用的 json 类库可能与我们的版本不太一致,导致我们本体引入后,json 的版本对不上,无法使用。
可否有办法能够解决这个问题呢,我感觉是我们生成打包的时候配置不太对的原因,可否兼容比如 7.0 以上版本的 json 都可以引用之类的,还望大佬们能够指点一下。
1
Iamnotfish 2020-01-02 23:18:49 +08:00
大概思路就是要么用客户的 JSON 类版本去写你的代码。要么就升级客户的 JSON 版本。
https://michaelscodingspot.com/how-to-resolve-net-reference-and-nuget-package-version-conflicts/ 参考一下这个文章试试 |
2
crclz 2020-01-02 23:58:38 +08:00
在你的项目里面用 nuget 安装客户的版本。然后打包成 nupkg,别打包成 dll。
|
3
ColinZeb 2020-01-06 16:12:51 +08:00
bindingRedirect 可以解决这个问题
|
4
coder001 2021-10-17 11:57:02 +08:00
我这里有个偏方,如果两个库版本差异太大以至于兼容不了,可以考虑把依赖捆进来
方案 1:用 IL Merge ( ILRepack ) 方案 2:把程序集嵌入资源,动态加载反射调用 反正我是遇到过老项目上依赖了老版本的 NewtonsoftJson 而且是有 BUG 的,还差异过大没法用 bindingRedirect 直接用新版本 那就只好嵌入新版的程序集,动态加载反射调用,AppDomain.AssemblyResolve 事件挺好用的,按需把程序集提供给 Runtime |