You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin多目标编译报错:‘System.ValueTuple`2’存在于多个引用程序集

解决netstandard2.0 + Xamarin.iOS编译C#7元组时的重复ValueTuple声明错误

这个问题我碰到好多次了,本质是两个目标框架对System.ValueTuple的处理逻辑不一致导致的冲突——netstandard2.0已经把这个类型内置到框架里了,但旧版Xamarin.iOS需要通过NuGet包引入,编译器同时看到两份声明就炸了。给你几个实用的解决办法:

1. 统一System.ValueTuple的引用版本

这是最直接的解决思路:

  • 右键你的解决方案,选择「管理解决方案的NuGet程序包」
  • 找到System.ValueTuple包,确保所有项目(包括netstandard类库和Xamarin.iOS项目)都引用同一个稳定版本(推荐4.5.0及以上)
  • 注意:如果你的netstandard2.0项目之前没手动引用过这个包,不要额外添加——因为框架已经内置了;但如果之前加过,一定要和Xamarin.iOS项目的版本对齐,避免框架自带和NuGet包的冲突

2. 升级Xamarin.iOS到最新稳定版

较新的Xamarin.iOS版本(比如Xamarin.iOS 12及以后)已经把System.ValueTuple内置到框架里了,和netstandard2.0的逻辑对齐。你可以:

  • 打开Visual Studio的「工具→获取工具和功能」
  • 在移动开发模块里,把Xamarin相关组件更新到最新稳定版
  • 更新完成后,删掉Xamarin.iOS项目里的System.ValueTuple NuGet引用,让它直接用框架内置的类型,冲突自然就消失了

3. 手动调整项目文件(进阶方案)

如果上面两种方法都没搞定,你可以直接编辑Xamarin.iOS项目的.csproj文件,添加以下配置来强制统一引用:

<PropertyGroup>
  <!-- 确保优先使用NuGet包的引用,而非系统内置 -->
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

<ItemGroup>
  <PackageReference Include="System.ValueTuple" Version="4.5.0" PrivateAssets="all" />
</ItemGroup>

这样可以明确指定项目使用NuGet包的System.ValueTuple,避免和netstandard框架的版本冲突。

临时 workaround(不推荐长期用)

如果赶时间需要快速编译,可以在项目文件里添加编译选项忽略重复声明的错误,但这只是治标不治本:

<PropertyGroup>
  <NoWarn>$(NoWarn);CS0436</NoWarn>
</PropertyGroup>

内容的提问来源于stack exchange,提问作者François

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:18:58