关于Nuget包解析,最近有一条原则。有关详细信息,请参阅NuGet如何解析包依赖关系。 Microsoft图表用于说明:
我今天遇到的一个问题是,我的一个Nuget软件包(称为Package A当前版本1.2.3)最初只支持csproj文件中定义的netstandard 2.0版本。
<TargetFramework>netstandard2.0</TargetFramework>
我还有另一种产品ECS Nuget软件包(称为Package B版本1.0.0),并且Package B需要引用Package A。
关系路由为[Package B 1.0.0]-> [Package A 1.2.3]
这时,程序中的两个软件包可以正常使用。
后来,由于.net框架的支持,我修改了原始程序包A nuget程序包,并将其更改为以下内容。
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
软件包软件包的生成版本为1.3.2。这时,我参考了以上两个软件包,发现编译正常,但是在运行时出现错误。
我可以通过升级软件包B来解决上述问题,但是为什么会出现此错误? 是因为使用了TargetFrameworks吗? 我也希望大个子能指点一下。
答案 0 :(得分:0)
比较*.deps.json
文件时,发现有帮助。这是获取以下json文件的第一种情况:
"aliyun-net-sdk-core/1.3.2": {
"dependencies": {
"Serilog": "2.5.0",
"Serilog.Exceptions": "4.0.0",
"Serilog.Sinks.File": "4.0.0"
},
"runtime": {
"lib/netstandard2.0/aliyun-net-sdk-core.dll": {
"assemblyVersion": "0.0.0.0",
"fileVersion": "0.0.0.0"
}
}
}
但是,由于引用了1.3.2版,因此CLR在加载程序集时找不到版本1.3.2的DLL,因此只有程序集版本0.0.0.0,因此CLR查找1.2。原始项目引用了3版本,但未找到,因此报告错误。 清楚了解。
组成项目的未组装版本后,我得到了 正确的结果。