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)
我想了解并解决这个异常。
备注:
- UnitTest 项目正在使用 .Net Framework 4.7.2
- 引用的项目正在使用 .Net 标准 2.0,并引用其他项目。
- System.Threading.Tasks.Extensions 既没有被我的测试项目明确引用,也没有被引用的 dll 引用。
我已经调查过的内容:
- 在测试项目中添加 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>
注意:对于我接下来的调查步骤,我保留了这个绑定重定向
检查 System.Threading.Tasks.Extensions.dll 是否存在于测试项目 bin/debug 文件夹中 => 如果是这样,则此 dll 存在。注意:我不知道如何确定它的 nuget 版本(windows explorer 中的详细信息只给出了 dll 版本)
将对 nuget System.Threading.Tasks.Extensions v4.5.4.0(最新版本)的引用添加到单元测试项目
将对 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。
我有一个引用了一个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)
我想了解并解决这个异常。
备注:
- UnitTest 项目正在使用 .Net Framework 4.7.2
- 引用的项目正在使用 .Net 标准 2.0,并引用其他项目。
- System.Threading.Tasks.Extensions 既没有被我的测试项目明确引用,也没有被引用的 dll 引用。
我已经调查过的内容:
- 在测试项目中添加 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>
注意:对于我接下来的调查步骤,我保留了这个绑定重定向
检查 System.Threading.Tasks.Extensions.dll 是否存在于测试项目 bin/debug 文件夹中 => 如果是这样,则此 dll 存在。注意:我不知道如何确定它的 nuget 版本(windows explorer 中的详细信息只给出了 dll 版本)
将对 nuget System.Threading.Tasks.Extensions v4.5.4.0(最新版本)的引用添加到单元测试项目
将对 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。