System.ValueTuple版本冲突疑问:为何自身引用旧版本?如何解决?
System.ValueTuple版本冲突问题排查与解决
问题描述
遇到System.ValueTuple版本冲突警告,具体信息如下:
There was a conflict between "System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" and "System.ValueTuple, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51". warning MSB3277: "System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" was chosen because it was primary and "System.ValueTuple, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" was not. warning MSB3277: References which depend on "System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" [D:\Projects\api\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll]. warning MSB3277: D:\Projects\api\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll warning MSB3277: Project file item includes which caused reference "D:\Projects\api\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll". warning MSB3277: System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL warning MSB3277: References which depend on "System.ValueTuple, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" []. warning MSB3277: D:\Projects\api\packages\Azure.Core.1.25.0\lib\net461\Azure.Core.dll
疑问:
- 是否理解有误?为何看起来仅有System.ValueTuple包自身引用了旧版本?
- 该如何解决这一异常的依赖问题?
问题解释
你的理解没问题,冲突根源是:
- 你直接引用的
System.ValueTuple.4.5.0包,其net47版本对应的程序集版本为4.0.3.0 Azure.Core.1.25.0依赖System.ValueTuple的4.0.5.0版本,但该版本未被实际安装(警告中依赖路径为空[])
MSBuild选择4.0.3.0是因为它是项目直接引用的「主程序集」,而4.0.5.0只是间接依赖且未解析到具体文件。
解决步骤
方法1:添加程序集重定向
在项目的App.config或Web.config中加入重定向配置,让所有对4.0.5.0的请求指向已安装的4.0.3.0版本:
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.0.5.0" newVersion="4.0.3.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
方法2:调整依赖包
- 更新
Azure.Core到最新版本:新版本大概率会兼容System.ValueTuple的4.0.3.0,或自动处理依赖冲突 - 移除手动安装的
System.ValueTuple包:.NET Framework 4.7及以上版本已内置System.ValueTuple,手动安装的NuGet包易与内置版本冲突。卸载后项目会自动使用框架内置版本,规避版本不一致问题
方法3:检查项目目标框架
确认项目目标框架为.NET Framework 4.7及以上,该版本开始System.ValueTuple已成为框架一部分,无需手动安装NuGet包。若目标框架低于4.7,需确保安装的System.ValueTuple版本与Azure.Core依赖版本匹配。
内容的提问来源于stack exchange,提问作者Stinger
相关产品推荐
相关产品推荐

