关于一个类库打包的问题

2020-01-02 15:44:20 +08:00
 refkent

本人本不是专门的.NET 开发,公司业务上有.NET SDK 的开发需求,于是鬼使神差地落到了我的头上,我们的 SDK 是以类库( DLL )的形式提供给客户的,最近遇到过一些问题,来问问大家有没有好的解决办法,百度一下好像关键字不太对,没找到我这里想要的。

因为我们的 SDK 依赖了.NET Json,就是那个 Newtonsoft,这个时候生成 DLL 后,会有两个 DLL:

SDK 的本体,
Newtonsoft.json.dll

但是客户用的 json 类库可能与我们的版本不太一致,导致我们本体引入后,json 的版本对不上,无法使用。

可否有办法能够解决这个问题呢,我感觉是我们生成打包的时候配置不太对的原因,可否兼容比如 7.0 以上版本的 json 都可以引用之类的,还望大佬们能够指点一下。

2591 次点击
所在节点    .NET
4 条回复
Iamnotfish
2020-01-02 23:18:49 +08:00
大概思路就是要么用客户的 JSON 类版本去写你的代码。要么就升级客户的 JSON 版本。
https://michaelscodingspot.com/how-to-resolve-net-reference-and-nuget-package-version-conflicts/
参考一下这个文章试试
crclz
2020-01-02 23:58:38 +08:00
在你的项目里面用 nuget 安装客户的版本。然后打包成 nupkg,别打包成 dll。
ColinZeb
2020-01-06 16:12:51 +08:00
bindingRedirect 可以解决这个问题
coder001
2021-10-17 11:57:02 +08:00
我这里有个偏方,如果两个库版本差异太大以至于兼容不了,可以考虑把依赖捆进来
方案 1:用 IL Merge ( ILRepack )
方案 2:把程序集嵌入资源,动态加载反射调用

反正我是遇到过老项目上依赖了老版本的 NewtonsoftJson 而且是有 BUG 的,还差异过大没法用 bindingRedirect 直接用新版本
那就只好嵌入新版的程序集,动态加载反射调用,AppDomain.AssemblyResolve 事件挺好用的,按需把程序集提供给 Runtime

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/634472

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX