繁体   English   中英

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

[英]Nuget package references cause “Could not load file or assembly” ?

Nuget包解析有一个最近的原则。 有关详细信息,请参阅NuGet如何解析包依赖项。 Microsoft图表用于解释:

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

我今天遇到的一个问题是我的一个Nuget包(称为Package A当前版本1.2.3)最初只支持netstandard 2.0的版本,它在csproj文件中定义。

<TargetFramework>netstandard2.0</TargetFramework>

我有另一个产品,ECS Nuget包(称为包B版1.0.0),包B需要引用包A.

关系路线是[包B 1.0.0] - > [包A 1.2.3]

此时,程序中的两个包可以正常使用。

后来,由于.net框架的支持,我修改了原始包A nuget包并将其更改为以下内容。

<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>

包的包生成版本是1.3.2。 这时,我参考上面的两个包,发现编译没问题,但我在运行时遇到错误。

在此输入图像描述 我可以通过升级包B解决上述问题,但为什么会出现这个错误? 是因为使用了TargetFrameworks吗? 我也希望大个子能指点一下。

当我比较*.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版本由原始项目,但没有找到,所以它报告错误。 清楚地了解。

在我编写项目的miss assembly版本后,我得到了正确的结果。

第二

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM