如何解决调用Azure.Storage.Blobs时System.Threading.Tasks.Extensions加载错误
问题原因
- 本质是.NET Framework项目引用.NET Standard类库时的程序集版本匹配冲突:Azure.Storage.Blobs v12.9.1依赖特定版本的
System.Threading.Tasks.Extensions,但项目输出目录的dll版本和依赖要求的版本不匹配,绑定重定向配置错误导致无法正常降级/升级引用。 - 你之前填写的绑定重定向
newVersion="4.5.4.0"是Nuget包版本号,但System.Threading.Tasks.Extensions的Nuget版本和程序集版本不对应:比如Nuget v4.5.4对应的实际程序集版本为4.2.0.1,版本号不匹配导致重定向完全不生效。 - 单元测试项目默认可能未开启自动绑定重定向,就算手动添加配置也可能生成时没有被写入最终的运行时配置文件。
解决方案
1. 开启单元测试项目的自动绑定重定向
右键单元测试项目 → 选择「属性」→ 切换到「生成」标签页,勾选「自动生成绑定重定向」选项。
如果使用旧格式的csproj项目,直接编辑项目文件,在第一个<PropertyGroup>节点下添加两个配置:
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
2. 修正绑定重定向配置
先找到测试项目bin/Debug目录下的System.Threading.Tasks.Extensions.dll,右键 → 属性 → 详细信息,查看「程序集版本」字段的实际值,比如是4.2.0.1。
修改App.config里的绑定重定向,把newVersion改成你查到的实际程序集版本:
<dependentAssembly> <assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.5.4.0" newVersion="4.2.0.1" /> </dependentAssembly>
3. 清理缓存并重新生成
- 关闭Visual Studio,删除所有项目(包括类库和测试项目)的bin、obj文件夹
- 执行命令
dotnet nuget locals all --clear清理全局Nuget缓存,也可以手动删除C:\Users\你的用户名\.nuget\packages目录下的所有内容 - 重新打开VS,还原Nuget包后重新生成整个解决方案
4. 验证配置生效
生成完成后检查测试项目bin目录下的[你的测试项目名].dll.config文件,确认里面已经包含了你添加的绑定重定向配置,如果没有则手动复制进去即可。
内容的提问来源于stack exchange,提问作者Teckel Cruel
相关产品推荐
相关产品推荐

