aliyun / aliyun-openapi-net-sdk

Alibaba Cloud SDK for .NET
https://www.nuget.org/profiles/aliyun-openapi-sdk
Other
541 stars 625 forks source link

Build warning NU1602 #331

Closed hanabi1224 closed 4 years ago

hanabi1224 commented 4 years ago

sdk: dotnet 3.0.100

warning NU1602: aliyun-net-sdk-ecs 4.17.6 does not provide an inclusive lower bound for dependency Newtonsoft.Json (<= 12.0.2). An approximate best match of Newtonsoft.Json 3.5.8 was resolved.

AxiosLeo commented 4 years ago

这个 warning 不影响使用。 因为需要照顾到使用 Newtonsoft.Json 其它版本的开发者,所以用的版本范围依赖。

hanabi1224 commented 4 years ago

@AxiosCros 能加个下限吗?最低的 3.5.8也行,不然编译时一大堆这种warning刷屏

AxiosLeo commented 4 years ago

@AxiosCros 能加个下限吗?最低的 3.5.8也行,不然编译时一大堆这种warning刷屏

考虑到兼容旧版本,这个不能改的。 您可以使用源码编译安装的方式,手动修改 csproj 文件,改变 Newtonsoft.Json 的依赖版本。

hanabi1224 commented 4 years ago

@AxiosCros 没懂你的意思,加一下版本下限为什么不能兼容旧版本? 这个warning的意思是,没有指定版本范围的下限,所以自动使用了3.5.8,加上下限完全是一样的,只是warning没有了,为什么会出现兼容问题???

hanabi1224 commented 4 years ago

@AxiosCros 另外包依赖的版本一般都是指定下限不指定上限,如果指定上限也是把major version+1 比如<13这样,为什么要把上限定在一个minor version? 假如json.net修复了一个严重漏洞发布了12.0.3 用户如果用了这个aliyun的sdk都没有办法升级

AxiosLeo commented 4 years ago

sdk: dotnet 3.0.100

warning NU1602: aliyun-net-sdk-ecs 4.17.6 does not provide an inclusive lower bound for dependency Newtonsoft.Json (<= 12.0.2). An approximate best match of Newtonsoft.Json 3.5.8 was resolved.

@hanabi1224 你可以手动修改下 aliyun-net-sdk-ecs/aliyun-net-sdk-ecs.vs2017.csproj 这个文件 将 Newtonsoft.Json 的 version 改成你想要的版本,就可以去掉这个 warning 了。 为了考虑兼容性,默认必须是使用版本范围,而不是指定版本,但是您可以在您本地指定特定版本。

因为用户的系统环境复杂,下限很不好定,所以才考虑用向下兼容的方式,后续我们会评估向上兼容 [3.5.8,) 的影响,可行的话,会考虑改成这个,不过,在不同环境下,可能依然会有 warning。 但是这种方式可以让用户正常安装,多的一个 warning 是不影响实际使用的。

AxiosLeo commented 4 years ago

我这边测试,在 dotnet 3.0 环境下,将 Newtonsoft.Json 的 version 改成 [10.0.1,) 可以去掉这个 warning。 其它环境暂时没测。

AxiosLeo commented 4 years ago

@AxiosCros 能加个下限吗?最低的 3.5.8也行,不然编译时一大堆这种warning刷屏

一个产品只会有这一种 warning 的,被 warning 刷屏,您是不是编译全部产品 SDK 了?还是因为有其它的很多 warning ? 因为 SDK 是自动生成的,codeStyle 比较老,确实可能会有不少 warning,尤其是您使用的还是最新的 dotnet 3.0 。

下面两个命令可以只编译 Ecs 产品的 sdk

dotnet restore aliyun-net-sdk-ecs/aliyun-net-sdk-ecs.vs2017.csproj
dotnet build aliyun-net-sdk-ecs/aliyun-net-sdk-ecs.vs2017.csproj
hanabi1224 commented 4 years ago

感谢~ 另外实际上浮动版本和兼容性没关系 几乎所有的.dotnet包都不用浮动版本引用json.net 用户依然可以自己指定版本 用浮动版本的意思在已知版本不兼容的情况下是禁止用户使用范围外的版本(默认是可以的)

hanabi1224 commented 4 years ago

实际上你只要随便引用一个json.net版本用户还是可以通过直接引用改成其他版本 加了范围只是给用户的限制变多了 不存在解决兼容性的问题

AxiosLeo commented 4 years ago

SDK 指定使用 12.0.2 版本,但是用户使用的是 6.0.1 版本,这是会安装不成功的。 之前有遇到过这个工单问题,才改成的范围限定。

AxiosLeo commented 4 years ago

请问还有问题吗?issue 我先关掉了,如果还有问题可以 reopen