.Net Core Nuget包版本不匹配:两个包引用了同一个dll的不同版本

4

目前我有一个ASPNet.Core Web应用程序,其中包含2个NuGet软件包,这些软件包引用了同一dll的不同版本。Web项目正常工作,但是当我在“单元测试”项目中添加对“Web”项目的引用时,会出现编译错误。显然有些东西解决了这些dll差异,因为Web项目可以编译而没有问题。只有当我添加对Web项目以添加测试时,才会发生下面的编译错误,并且只在单元测试项目中。

程序集“KII.Web”具有标识 “KII.Web,Version=1.0.0.0,Culture=neutral, PublicKeyToken=null”,使用了版本为 “Microsoft.Extensions.Options,Version=2.2.0.0,Culture=neutral, PublicKeyToken=adb9793829ddae60”的程序集, 它比引用程序集“Microsoft.Extensions.Options”具有更高的版本, 其标识为“Microsoft.Extensions.Options,Version=2.1.1.0,Culture=neutral, PublicKeyToken=adb9793829ddae60” KII.UnitTests C:\Projects\kii\web\src\Tests\KII.UnitTests\Controllers\HomeControllerTest.cs

此外,我还在单元测试项目中遇到了构建错误。

程序集 'KII.Web' 使用了版本为 '2.1.1.0' 的 'Microsoft.AspNetCore.Mvc.ViewFeatures',该版本高于所引用程序集 'Microsoft.AspNetCore.Mvc.ViewFeatures' 的版本 '1.0.3.0'

本质上,Web 项目有以下内容:

  • Microsoft.AspNetCore.App 2.2.0 引用了 Microsoft.Extensions.Options 2.2.0
  • KenticoCloud.Delivery 10.0.1 引用了 Microsoft.Extensions.Options 2.1.1

我已经尝试的事情:

  • 清理/重建
  • 手动删除 bin 目录
  • 在单元测试和 Web 项目的 app.configs 中添加 binding redirects
  • 将 KenticoCloud.Delivery 更新到 11.0.0-beta1
由于这是.net core,所以我无法在web.config中调整任何hintpaths。我认为检查GAC是否存在旧版本/更新它不会起作用,因为.net core不使用GAC。由于有问题的dll是nuget包的子依赖项,我无法更新nuget包以解决问题。

类似的SO问题


1
你是否考虑将你的应用程序降级到 Microsoft.AspNetCore.App 2.1.1 版本,这样可以消除你的问题。 - Patrick Mcvay
@PatrickMcvay 这样做解决了一个错误,但我还有两个dll错误。另一个仍然存在。程序集'KII.Web'使用'Microsoft.AspNetCore.Mvc.ViewFeatures, Version=2.1.1.0',其版本比引用程序集'Microsoft.AspNetCore.Mvc.ViewFeatures'的版本'Microsoft.AspNetCore.Mvc.ViewFeatures, Version=1.0.3.0'高。 - w00ngy
1个回答

1
这个问题的解决方法是在Web项目中直接安装共享包依赖项之一Microsoft.AspNetCore.Mvc.ViewFeatures版本2.2.0的最新版本。直接依赖此包可以使单元测试项目正确解析其依赖项。

在KII.Web.csproj中添加了此包依赖项。

<PackageReference Include="Microsoft.AspNetCore.Mvc.ViewFeatures" Version="2.2.0" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接