如何让Moq库适配.NET Core Preview 3.x?是否可行?
在.NET Core Preview 3.x中使用Moq:解决日志库版本冲突问题
当然可行!你遇到的是典型的NuGet包版本冲突问题,不少开发者在过渡到.NET Core预览版时都踩过类似的坑,咱们一步步来搞定它。
问题根源
你的主项目MyProject引用了Microsoft.Extensions.Logging.Abstractions 3.0.0.0,但Moq(或者它依赖的某个间接包)还在使用旧版本2.2.0.0,编译器因为版本不一致抛出了CS1705错误。
解决步骤
第一步:更新Moq到兼容版本
先确认你的Moq版本是否支持.NET Core 3.x。打开NuGet包管理器,搜索Moq并更新到最新稳定版(优先选明确标注支持.NET Core 3.x的版本)。更新后,Moq的依赖包通常会自动对齐到和你项目一致的日志库版本。第二步:添加程序集绑定重定向
如果更新Moq后冲突依然存在,可以强制让所有引用统一使用3.0.0版本的日志库。在你的测试项目中添加或修改app.config文件,加入以下配置:<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>如果你用的是SDK风格项目,记得在
csproj文件中添加以下属性,确保绑定重定向生效:<PropertyGroup> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> </PropertyGroup>第三步:排查间接依赖
用命令行运行以下命令,查看所有间接依赖项,找出还在引用2.2.0版本日志库的包:dotnet list package --include-transitive如果找到某个依赖包停留在旧版本,尝试更新它;如果无法更新,就用第二步的绑定重定向强制覆盖版本。
额外提示
.NET Core预览版本身处于迭代阶段,尽量保持所有NuGet包版本和SDK版本对齐,能减少大部分兼容性问题。
内容的提问来源于stack exchange,提问作者ticofab
相关产品推荐
相关产品推荐

