簡體   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