Nuget软件包引用导致“无法加载文件或程序集”?

时间:2019-05-17 11:33:22

标签: c# nuget

关于Nuget包解析,最近有一条原则。有关详细信息,请参阅NuGet如何解析包依赖关系。 Microsoft图表用于说明:

Microsoft Image 这次,您将选择最新的软件包,即2.0版本。 没问题。

我今天遇到的一个问题是,我的一个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。这时,我参考了以上两个软件包,发现编译正常,但是在运行时出现错误。

enter image description here 我可以通过升级软件包B来解决上述问题,但是为什么会出现此错误? 是因为使用了TargetFrameworks吗? 我也希望大个子能指点一下。

1 个答案:

答案 0 :(得分:0)

比较*.deps.json文件时,发现有帮助。这是获取以下json文件的第一种情况: Fisrt

"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版本,但未找到,因此报告错误。 清楚了解。

组成项目的未组装版本后,我得到了 正确的结果。

Second