将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安装的话,运行:
或者在NuGet包管理器里搜索dotnet add package DryIoc.dll --version 3.0.3DryIoc.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
相关产品推荐
相关产品推荐

