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

将Xamarin.Forms项目从PCL迁移到.NET Standard时遇DryIoc CS0121错误

解决Xamarin.Forms迁移至.NET Standard时DryIoc的CS0121歧义调用错误

我之前帮别人处理过类似PCL转.NET Standard的DryIoc冲突问题,这个错误本质是编译器看到了完全相同的两个方法定义,大概率是迁移过程中旧的PCL版本DryIoc文件和新的.NET Standard版本文件同时被引用导致的,下面是一步步的解决办法:

第一步:彻底清理旧的DryIoc残留

  • 先从你的项目中完全卸载DryIoc以及所有依赖它的NuGet包(在Visual Studio的NuGet包管理器里操作最方便)
  • 打开终端运行命令清理本地NuGet缓存:
    dotnet nuget locals all --clear
    
  • 手动删除项目目录下的.vs、bin、obj文件夹,还有根目录的packages文件夹(如果存在的话),这些文件夹里很可能残留了旧版本的编译文件

第二步:重新安装适配.NET Standard的DryIoc版本

  • 别再用2.12.7这个旧版本了,它对.NET Standard的支持不够完善,建议安装最新的稳定版(比如3.x系列,完全支持.NET Standard 2.0+)
  • 用dotnet CLI安装的话,运行:
    dotnet add package DryIoc.dll --version 3.0.3
    
    或者在NuGet包管理器里搜索DryIoc.dll,选择最新的兼容版本安装

第三步:检查并修复项目文件的重复引用

  • 右键项目选择“编辑项目文件”,打开.csproj文件
  • 查找所有和DryIoc相关的<PackageReference>或者<Compile>项,确保只有一个DryIoc的引用,如果发现重复的条目直接删除
  • 另外还要检查是否有类似<Content Include="**/DryIoc/*.cs" />这样的内容包含项,如果有也删掉,避免重复编译源码文件

第四步:排查PCL兼容包的依赖冲突

  • 你提到用了PCL兼容的NuGet包,这些包可能依赖了旧版本的DryIoc,导致版本冲突
  • 在NuGet包管理器的“依赖项”标签下,查看所有包的依赖树,找到是否有多个版本的DryIoc被引用
  • 如果发现冲突,尝试更新那些依赖旧DryIoc的包到支持.NET Standard的版本,或者使用NuGet的“统一所有依赖版本”功能来强制使用同一个DryIoc版本

最后:清理并重建解决方案

  • 在Visual Studio里依次点击“生成”->“清理解决方案”
  • 然后点击“生成”->“重建解决方案”,应该就能解决这个歧义调用的问题了

如果还是不行,可以尝试在.csproj里添加排除项,强制移除重复的DryIoc源码文件:

<ItemGroup>
  <Content Remove="**/DryIoc/*.cs" />
  <Compile Remove="**/DryIoc/*.cs" />
</ItemGroup>

内容的提问来源于stack exchange,提问作者russd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:34:37