Nuget dll 地狱:如何解决"Could not load file or assembly 'System.Threading.Tasks.Extensions, Version=4.5.4.0"

Nuget dll hell : How to solve "Could not load file or assembly 'System.Threading.Tasks.Extensions, Version=4.5.4.0"

我有一个引用了一个dll项目的测试项目;此 dll 项目引用自身 Azure Nugets,尤其是 Azure.Storage.Blobs (v12.9.1) 到达此指令时,我的一项测试失败了:

var blobServiceClient = new BlobServiceClient(connectionString);

例外情况是:

System.IO.FileLoadException
  HResult=0x80131040
  Message=Could not load file or assembly 'System.Threading.Tasks.Extensions, Version=4.5.4.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
  Source=Azure.Storage.Blobs
  StackTrace:
   at Azure.Storage.Blobs.BlobServiceClient..ctor(String connectionString, BlobClientOptions options)
   at Azure.Storage.Blobs.BlobServiceClient..ctor(String connectionString)
  (…)

Inner Exception 1:
FileLoadException: Could not load file or assembly 'System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

我想了解并解决这个异常。

备注:

我已经调查过的内容:

  1. 在测试项目中添加 bindingredirect App.Config :
          <dependentAssembly>
            <assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.5.4.0" newVersion="4.5.4.0" />
          </dependentAssembly>

注意:对于我接下来的调查步骤,我保留了这个绑定重定向

  1. 检查 System.Threading.Tasks.Extensions.dll 是否存在于测试项目 bin/debug 文件夹中 => 如果是这样,则此 dll 存在。注意:我不知道如何确定它的 nuget 版本(windows explorer 中的详细信息只给出了 dll 版本)

  2. 将对 nuget System.Threading.Tasks.Extensions v4.5.4.0(最新版本)的引用添加到单元测试项目

  3. 将对 nuget System.Threading.Tasks.Extensions v4.5.4.0(最新版本)的引用添加到引用的项目

感谢您的帮助。

既然解决了你的问题,我做了一个总结,希望对其他遇到similar/same问题的论坛成员也有所帮助。

对于元素,考虑使用程序集版本,而不是 NuGet 包版本。有关详细信息,请参阅 here

对于System.Threading.Task.Extensions NuGet包,目前最新的NuGet包版本是4.5.4,程序集最新版本是4.2.0.1,所以尽量使用4.2.0.1。